3

为什么这个工作...

Just.(+3) $ 6.7
Just $ truncate 8.9

...但不是这个?

Just.truncate $ 8.9

我尝试将截断解析为一个简单的 Double -> Int:

let f :: Double -> Int; f = (\ x -> truncate x);

……但这似乎不是问题……

Just.f $ 5.6

<interactive>:41:1:
Failed to load interface for `Just'
Use -v to see a list of the files searched for.

非常感谢!

4

2 回答 2

10

当你的意思是组合函数时,写f . gf.g. 它更具可读性,并且您避免了像这样的一堆问题。

当您有某种形式Foo.barFoo.Bar在 Haskell 中时,它会被解析为限定名称。这就是为什么Just.f不起作用:Just不是模块,因此Just无法加载“接口”。

为什么Just.(+3)按预期工作:(+3)是正确的部分,而不是标识符,因此点不能成为限定名称的一部分。解释它的唯一方法是假设它.是运算符的中缀应用(.),所以它必须是Just . (+3)

于 2014-02-15T20:07:19.687 回答
4

大写标识符和另一个标识符之间的点被解析为限定名称(例如Data.Map.insert),因此错误告诉您它找不到名为 的模块Just。您可以简单地在点周围添加空格来解决此问题。

于 2014-02-15T20:04:26.563 回答