sqd*_*sqd 0 haskell functional-programming
Nothing
的类型可能是Maybe Int
,为什么不能与另一个相比Maybe Int
?
为什么Nothing< Just 4
通过?
是的,Nothing
可以是类型Maybe Int
(或Maybe String
,或Maybe AnythingElse
).
Maybe Int
可以比较任何两个类型的值.
平等==
被定义为人们可能期望的:Nothing
仅等于Nothing
,并且Just x
仅等于Just y
if x==y
.这是在Eq
实例中定义的Maybe a
,由于它在Haskell中,因此会自动导入Prelude
.
同样,也有一个Ord (Maybe a)
实例Prelude
.这个实例定义<
之间Maybe Int
这么说Nothing
是最小元素(<
别的),而这两个值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
...
Run Code Online (Sandbox Code Playgroud)
(还有一些底部,我省略了.)
该值4
不是类型的值Maybe Int
.Just 4
而是一个这样的价值观.