当我输入以下内容时,我无法理解编译器的作用:
(curry . uncurry) (+) 1 2
Run Code Online (Sandbox Code Playgroud)
在我理解之后,编译器首先使用 uncurry,这意味着会发生错误,因为 uncurry 函数需要这样的输入:
(curry . uncurry) (+) (1,2)
Run Code Online (Sandbox Code Playgroud)
但显然第一个是对的。我不明白为什么。
编译器在评估这个时到底采取了哪些步骤?
另一个主题包括问题:为什么
(uncurry . curry) (+) (1,2)
Run Code Online (Sandbox Code Playgroud)
不起作用?
我目前正在学习 Haskell,我想为货币定义我自己的递归数据类型Dollar(只是钞票,而不是硬币)。
我的尝试是这样的:
data Dollar = One Dollar
| Two Dollar
| Five Dollar
| Ten Dollar
| Twenty Dollar
| Fifty Dollar
| Hundred Dollar
Run Code Online (Sandbox Code Playgroud)
我向我的一个朋友展示了这个,他说它看起来不错,但他还告诉我| End在定义的末尾加上一个。他试图解释为什么有必要,但我无法跟上他的思路。也许这里有人有我可以遵循的解释。我真的很感激。
recursion haskell types algebraic-data-types custom-data-type