我不明白为什么我从GHCi得到以下回复.不是Maybe构造函数吗?
Prelude> :t Maybe
<interactive>:1:1: Not in scope: data constructor `Maybe'
Prelude> let e = Maybe 5
<interactive>:1:9: Not in scope: data constructor `Maybe'
Run Code Online (Sandbox Code Playgroud)
Ion*_*tan 26
Maybe是一个类型构造函数,它的两个可能的数据构造函数是Nothing和Just.所以你必须说Just 5而不是Maybe 5.
> let x = Just 5
> x
Just 5
> let y = Nothing
> y
Nothing
> :type x
x :: Maybe Integer
> :type y
y :: Maybe a
> :info Maybe
data Maybe a = Nothing | Just a -- Defined in Data.Maybe
instance Eq a => Eq (Maybe a) -- Defined in Data.Maybe
instance Monad Maybe -- Defined in Data.Maybe
instance Functor Maybe -- Defined in Data.Maybe
instance Ord a => Ord (Maybe a) -- Defined in Data.Maybe
instance Read a => Read (Maybe a) -- Defined in GHC.Read
instance Show a => Show (Maybe a) -- Defined in GHC.Show
Run Code Online (Sandbox Code Playgroud)
Maybe是一个类型构造函数,因为它用于构造新类型(结果类型取决于ain 的类型Maybe a),其中这样的类型可能是Maybe Int(注意,a不再有类型参数,即所有类型参数都被绑定).Just a并且Nothing是数据构造函数,因为它们用于构造某种Maybe类型的Just Int实例,例如创建实例Maybe Int.
另一个主要区别是您只能在模式匹配时使用数据构造函数.你不能说:
case foo of
Maybe a -> ...
Run Code Online (Sandbox Code Playgroud)
你不得不说:
case foo of
Just a -> ...
Nothing -> ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4253 次 |
| 最近记录: |