Just 5
与Just (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
答案 0 :(得分:4)
Just 5
的类型为Maybe Int
,Just (Just 5)
的类型为Maybe (Maybe Int)
。值的类型不同。
Maybe a
和Maybe (Maybe a)
之间并没有很多不同之处。 Just x
与Just (Just x)
非常相似,Nothing :: Maybe a
与Nothing :: Maybe (Maybe a)
非常相似。唯一真正的区别是Just Nothing
的存在,Maybe a
中没有可比价值。
如果您认为类型a
的基数为N(N个可能的值类型为a
),则Maybe a
的基数为N + 1,其中N值为{ {1}}和Just x
的一个值。因此Nothing
的基数为N + 2.