javascript - PureScript 不组成 `trace` 和 `show`

标签 javascript functional-programming purescript

所以下面的工作

 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/

相关文章:

javascript - Node.js 中的面向对象设计

swift - 反向压缩一个集合

function - 什么是多态λ?

javascript - 可拖动效果在 Javascript 中不起作用

javascript - 在 Cypress 的 for 循环中等待异步方法

r - 使用 bquote 创建带点的变量名

PureScript 类型系统名称

source-maps - Sourcemaps 不适用于 spago(纯脚本)

purescript - 在 PureScript 中,List 与 Array 有何不同?

javascript - jQuery-Datatables 下拉列表仅适用于某些列