繁体   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