所以以下工作
main = do
trace $ show $ 5
但这并不
main = do
(trace . show) 5
在 psci 中,跟踪的类型是
forall r. Prim.String -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
节目的类型是
forall a. (Prelude.Show a) => a -> Prim.String
因为 show 的返回值是Prim.String
并且第一个输入到 trace 是Prim.String
它们应该是可组合的。trace $ show
通过类型检查进一步证明了这一点。但是我得到了这个错误:
Error at line 1, column 10:
Error in declaration it
Cannot unify Prim.Object with Prim.Function Prim.String.
我在这里想念什么?现在我的心智模型trace
很像putStrLn
Haskell,而且绝对可以用show
. (putStrLn . show) 5
作品。
跟踪和显示组合结果的预期类型:
forall a r. (Prelude.Show a) => a -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit