[英]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.