包含值的多个Just数据构造函数

时间:2015-07-17 02:56:28

标签: haskell

Just 5Just (Just 5)相同。从理论上讲,我确信答案是否定的,但在现实生活中,我们是否使用像Just (Just (Just ..... (Just 5)))这样的值

我遇到的至少一个例子是real world haskell as,

maybeReview alist = do
title <- lookup1 "title" alist
return (MovieReview title)'

lookup1 key alist = case lookup key alist of
                      Just (Just s@(_:_)) -> Just s
                      _ -> Nothing

为什么我们需要此行中的外部Just数据构造函数

Just (Just s@(_:_)) -> Just s

1 个答案:

答案 0 :(得分:4)

Just 5的类型为Maybe IntJust (Just 5)的类型为Maybe (Maybe Int)。值的类型不同。

Maybe aMaybe (Maybe a)之间并没有很多不同之处。 Just xJust (Just x)非常相似,Nothing :: Maybe aNothing :: Maybe (Maybe a)非常相似。唯一真正的区别是Just Nothing的存在,Maybe a中没有可比价值。

如果您认为类型a的基数为N(N个可能的值类型为a),则Maybe a的基数为N + 1,其中N值为{ {1}}和Just x的一个值。因此Nothing的基数为N + 2.