所以下面的工作
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
非常像 Haskell 中的 putStrLn
,而且它肯定可以与 show
组合。 (putStrLn . show) 5
有效。
trace和show组合结果的预期类型:
forall a r. (Prelude.Show a) => a -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
最佳答案
.
不是函数组合,而是 property access在 PureScript 中,可以通过
main = show $ { test : "Hello, string property" } . test
函数组合运算符称为<<<
, 可能在 same operator in Control.Arrow
(Haskell) 之后.
关于javascript - PureScript 不组成 `trace` 和 `show`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943335/