繁体   English   中英

Haskell类型的同义词问题

[英]Haskell type synonym issue

这给了我以下错误

不在范围内:数据构造函数Blah

为什么? 我以为我可以使用类型同义词到处都可以使用Person

data Person = Person { weight :: Int, height :: Int }

type Blah = Person

person1 :: Blah
person1 = Blah 80 187 

你将Person类型别名为Blah ,但Person的构造函数仍然是Person {weight :: Int, height :: Int} 类型构造函数和类型名称是不同的,甚至保存在Haskell中的不同名称空间中。

举个例子:

> data MyBool = MyFalse | MyTrue deriving (Show, Eq)
> type Blah = MyBool

这里MyBool的构造MyBoolMyFalseMyTrue ,每个都有kind * (没有类型参数)。 然后我将MyBool别名为Blah

> MyTrue :: MyBool
MyTrue
> MyTrue :: Blah
MyTrue

这应该有助于强化这样的想法:虽然类型的构造函数可能与类型本身共享相同的名称,但它们并不相同。

在最热门的GHC 7.8中你可以这样写:

{-# LANGUAGE PatternSynonyms #-}

data Person = Person { weight :: Int, height :: Int }

type Bar = Person     -- type synonym
pattern Baz = Person  -- constructor synonym


person1 :: Bar
person1 = Baz 80 187

但是可以肯定的是,不要忘记Person是一个类型而Person是一个构造函数,两者都在不同的范围内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM