[英]Haskell: Why “Nothing<(4::Maybe Int)” gets an error but “Nothing< Just 4” pass?
Nothing
类型可能是Maybe Int
,为什么不能将其与另一个Maybe Int
进行比较?
以及为什么Nothing< Just 4
关?
表达式中有一个简单的类型错误: 4
没有类型Maybe Int
。
是的, Nothing
的类型不能为Maybe Int
(或Maybe String
或Maybe AnythingElse
)。
可以比较Maybe Int
类型的任何两个值。
==
的定义符合人们的预期: Nothing
仅等于Nothing
,并且x==y
Just x
仅等于Just y
x==y
。 这在Maybe a
的Eq
实例中定义,由于它在Haskell Prelude
,因此会自动导入。
同样, Prelude
也有一个Ord (Maybe a)
实例。 该实例在Maybe Int
之间定义<
,因此Nothing
是最小元素( <
其他),而根据x < y
是否比较两个值Just x
和Just y
x < y
。
因此, Nothing < Just 4
。
代码Nothing<(4::Maybe Int)
给您一个错误,因为4
是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
...
(和一些底部,我忽略了。)
值4
不是Maybe Int
类型的值。 相反, Just 4
是此类值之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.