PureScript不构成`trace`和`show`

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)

Zet*_*eta 5

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

main = show $ { test : "Hello, string property" } . test
Run Code Online (Sandbox Code Playgroud)

<<<可能Control.Arrow(Haskell)中相同运算符之后调用函数组合运算.