Nothing
的类型可能是Maybe Int
,为何无法将其与另一个Maybe Int
进行比较?
为什么Nothing< Just 4
通过?
答案 0 :(得分:7)
表达式中存在简单类型错误:4
没有类型Maybe Int
。
答案 1 :(得分:5)
是的,Nothing
可以是Maybe Int
(或Maybe String
或Maybe AnythingElse
)类型。
可以比较任何两个Maybe Int
类型的值。
平等==
定义为人们可能期望:Nothing
仅等于Nothing
,而Just x
仅等于Just y
{{1} }}。这在x==y
的{{1}}实例中定义,该实例会自动导入,因为它位于Haskell Eq
中。
同样,Maybe a
中也有Prelude
个实例。此实例在Ord (Maybe a)
之间定义Prelude
,以便<
是最小元素(Maybe Int
其他任何内容),而两个值Nothing
和<
根据是否Just x
进行比较。
所以,Just y
是真的。
代码x < y
给出错误,因为Nothing < Just 4
是Nothing<(4::Maybe Int)
(从技术上讲,它是4
类型类中的任何类型),但是{{1} }不是Int
。如果您撰写Num
或4
或Maybe Int
,您将收到类似的类型错误。
4 :: String
类型仅包含值
4 :: [Int]
(还有一些底部,我省略了。)
值4 :: Int -> Int
不是Maybe Int
类型的值。 Nothing
Just 0
Just 1
Just -1
Just 2
Just -2
...
是其中一个值。