Мне интересно, как работает сопоставление с образцом в Haskell. Я знаю эту тему, но не совсем понял ответы в ней.
(==)
и Уравнение
реализовано с использованием сопоставления с образцом.Можете ли вы сказать мне, почему match
и match3
работают, даже если я опускаю вывод (Eq)
в следующем фрагменте кода (понятно, почему match2
не работает)?
data MyType = TypeA | TypeB
deriving (Eq)
match :: MyType -> String
match TypeA = "this is type A"
match TypeB = "this is type B"
match2 :: MyType -> String
match2 a | a == TypeA = "this is type A matched by equality"
| a == TypeB = "this is type B matched by equality"
| otherwise = "this is neither type A nor type B"
match3 :: MyType -> String
match3 a = case a of TypeA -> "this is type A matched by case expression"
TypeB -> "this is type B matched by case expression"
main :: IO ()
main = do
(print . match) TypeA
(print . match) TypeB
(print . match2) TypeA
(print . match2) TypeB
(print . match3) TypeA
(print . match3) TypeB