Fre*_*all 4 javascript functional-programming purescript
以下是有效的
main = do
trace $ show $ 5
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
main = do
(trace . show) 5
Run Code Online (Sandbox Code Playgroud)
在psci中,跟踪的类型是
forall r. Prim.String -> Control.Monad.Eff.Eff (trace :: Debug.Trace.Trace | r) Prelude.Unit
Run Code Online (Sandbox Code Playgroud)
和节目的类型是
forall a. (Prelude.Show a) => a -> Prim.String
Run Code Online (Sandbox Code Playgroud)
因为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.
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?现在我的心理模型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
Run Code Online (Sandbox Code Playgroud)
.不是函数组合,而是PureScript中的属性访问,可以通过以下方式看到
main = show $ { test : "Hello, string property" } . test
Run Code Online (Sandbox Code Playgroud)
<<<可能在Control.Arrow(Haskell)中的相同运算符之后调用函数组合运算符.
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |