Haskellで
main = putStrLn $ show Nothing
こうするとエラーになる。
たとえばJust 0ならMaybe IntでJust "one"ならMaybe Stringって分かるけど
NothingはMaybeだってことしか分からないから駄目なのだろう。
どのみち結果は"Nothing"なんだからいーじゃねーかよと思わなくもないけど。
そして
main = putStrLn $ show (Nothing == Nothing)
これも同じくエラー。
でも
f 0 = Nothing
f 1 = Just "one"
main = putStrLn $ show ((f 0) == Nothing)
これはちゃんとTrueが出てくるんだよね。
Haskellは面白いね。