以下作品
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
,并且跟踪的第一个输入是Prim.String
,所以它们应该是可组合的。 trace $ show
通过类型检查进一步证明了这一点。但相反,我得到了这个错误:
Error at line 1, column 10:
Error in declaration it
Cannot unify Prim.Object with Prim.Function Prim.String.
我在这里缺少什么?现在我的心智模型是trace
非常像Haskell中的putStrLn
,并且一个绝对可以用show
组成。 (putStrLn . show) 5
有效。
跟踪和显示的预期组合结果类型:
forall a r. (Prelude.Show a) => a -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
答案 0 :(得分:5)
.
不是函数组合,而是PureScript中的property access,可以通过
main = show $ { test : "Hello, string property" } . test
函数组合运算符可能在same operator in Control.Arrow
(Haskell)之后调用<<<
。