У меня есть следующие два аналогичных определения функции:
left f (Left x) = Left (f x)
left _ (Right x) = Right x
left' f (Left x) = Left (f x)
left' _ [email protected](Right _) = r
Когда я проверяю сигнатуры типов двух функций, меня смущают следующие типы:
ghci> :t left
left :: (t -> a) -> Either t b -> Either a b
ghci> :t left'
left' :: (a -> a) -> Either a b -> Either a b
Я полагаю, что left
и left'
должны иметь одинаковую сигнатуру типа, но вывод типа haskell дает мне сюрприз.
Я не могу понять, почему сигнатуры типа left
и left'
отличаются. Кто-нибудь может дать мне некоторую информацию? Спасибо!