数据构造函数是否支持currying?

时间:2017-03-09 08:46:59

标签: haskell

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?

2 个答案:

答案 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也适用于“值构造函数”函数。