Haskell中的所有功能都是:
Prelude> type Subject = String
Prelude> type Verb = String
Prelude> type Object = String
Prelude> data Sentence = Sentence Subject Verb Object deriving (Eq, Show)
Prelude> :t Sentence
Sentence :: Subject -> Verb -> Object -> Sentence
Sentence是一个数据类型,但为什么它显示为一个函数? 即使我用值替换,也感觉就像一个函数。
s1 = Sentence "dogs" "drool"
数据类型是否也支持currying?
答案 0 :(得分:7)
正如Jokester所说,令人困惑的是,这里有两个名为“Sentence
”的东西:
Sentence
类型和Sentence
数据构造函数。许多数据构造函数是函数,因为许多数据类型存储了一些内容,而他们能够做到这一点的唯一方法就是在构造期间要求这些东西。
但是,Sentence
类型的对象不是函数。它们只是普通的价值观:
:t (Sentence "he" "likes" "cake")
:: Sentence
答案 1 :(得分:2)
v this is name of a new type
data Sentence = Sentence Subject Verb Object
^ and this is a function called "value constructor"
(it may or may not have same name with the new type)
所以答案是肯定的,currying也适用于“值构造函数”函数。