簡體   English   中英

Haskell:為什么“ Nothing <(4 :: Maybe Int)”得到一個錯誤,但是“ Nothing <Just 4”通過?

[英]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 StringMaybe AnythingElse )。

可以比較Maybe Int類型的任何兩個值。

==的定義符合人們的預期: Nothing僅等於Nothing ,並且x==y Just x僅等於Just y x==y 這在Maybe aEq實例中定義,由於它在Haskell Prelude ,因此會自動導入。

同樣, Prelude也有一個Ord (Maybe a)實例。 該實例在Maybe Int之間定義< ,因此Nothing是最小元素( <其他),而根據x < y是否比較兩個值Just xJust y x < y

因此, Nothing < Just 4


代碼Nothing<(4::Maybe Int)給您一個錯誤,因為4Int (從技術上講,它是Num類型類中的任何類型),但是4不是Maybe Int 如果您編寫4 :: String4 :: [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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM