use*_*633 3 haskell pattern-synonyms
这给了我以下错误
不在范围内:数据构造函数
Blah
为什么?我以为我可以在任何地方使用类型同义词Person
data Person = Person { weight :: Int, height :: Int }
type Blah = Person
person1 :: Blah
person1 = Blah 80 187
Run Code Online (Sandbox Code Playgroud)
您已将类型别名为Person名称Blah,但构造函数Person仍为Person {weight :: Int, height :: Int}.类型构造函数和类型名称是不同的,甚至保存在Haskell中的不同名称空间中.
举个例子:
> data MyBool = MyFalse | MyTrue deriving (Show, Eq)
> type Blah = MyBool
Run Code Online (Sandbox Code Playgroud)
这里的构造函数MyBool是MyFalse和MyTrue,每个都有种类*(没有类型参数).我的别名MyBool是Blah:
> MyTrue :: MyBool
MyTrue
> MyTrue :: Blah
MyTrue
Run Code Online (Sandbox Code Playgroud)
这应该有助于强化这样的想法:虽然类型的构造函数可能与类型本身共享相同的名称,但它们并不相同.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |