小编fre*_*ist的帖子

Haskell: Uncurry, Curry, 组合

当我输入以下内容时,我无法理解编译器的作用:

(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 currying

5
推荐指数
1
解决办法
164
查看次数

递归数据类型的附加情况

我目前正在学习 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

2
推荐指数
1
解决办法
68
查看次数