4

所以以下工作

 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很像putStrLnHaskell,而且绝对可以用show. (putStrLn . show) 5作品。

跟踪和显示组合结果的预期类型:

 forall a r. (Prelude.Show a) => a -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
4

1 回答 1

5

.不是函数组合,而是PureScript 中的属性访问,可以通过

main = show $ { test : "Hello, string property" } . test

函数组合运算符被称为<<<,可能在(Haskell)中的相同运算符Control.Arrow之后。

于 2014-07-24T21:19:20.750 回答