Почему Nothing == (чистое Nothing) возвращает False в Haskell? - PullRequest
6 голосов
/ 04 августа 2020

Кажется, я что-то не так понял, но я попробовал следующее:

GHCi, version 8.6.5
Nothing == Nothing
=> True
Nothing == (pure Nothing)
=> False
pure Nothing
=> Nothing

Не могли бы вы объяснить, что здесь происходит?

1 Ответ

13 голосов
/ 04 августа 2020

Два pure Nothing в вашем коде используют разные pure.

Если вы исследуете тип pure Nothing, вы увидите, что выбранная версия pure зависит от введите f.

GHCi> :t pure Nothing
pure Nothing :: Applicative f => f (Maybe a)

Когда вы вводите pure Nothing в интерактивном режиме, f выводится как IO, и выводится результат операции IO. Это ярлык, предоставляемый GHCi, которого нет в обычном коде Haskell.

GHCi> pure Nothing
Nothing
GHCi> pure Nothing :: IO (Maybe ())
Nothing

Однако при сравнении pure Nothing с Nothing, f выводится как Maybe. Это создает два слоя Maybe, что делает тип Maybe (Maybe a)

GHCi> Nothing == pure Nothing
False
GHCi> Just Nothing == pure Nothing
True
GHCi> pure Nothing :: Maybe (Maybe ())
Just Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...