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

zer*_*ing 0 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
Run Code Online (Sandbox Code Playgroud)

Sentence是一个数据类型,但为什么它显示为一个函数?即使我用一个值替换,它感觉就像一个函数.

s1 = Sentence "dogs" "drool"  
Run Code Online (Sandbox Code Playgroud)

数据类型是否也支持currying?

Ruf*_*ind 7

正如Jokester所指出的那样,令人困惑的是,这里有两个名为" Sentence"的东西:

  • Sentence 类型,和
  • Sentence 数据构造函数.

许多数据构造函数都是函数,因为许多数据类型存储了一些内容,并且他们能够做到这一点的唯一方法是在构造期间要求这些东西.

但是,具有该Sentence 类型的对象不是函数.它们只是普通的价值观:

:t (Sentence "he" "likes" "cake")
:: Sentence
Run Code Online (Sandbox Code Playgroud)