Мне интересно, какие объявления типов Haskell будут соответствовать схеме типов ниже?
∀a, b.H (a → b) ⇒ b
Это из 4.1 Однозначность / A Теория перегрузки
Позже Редактировать после ответа chi .
Я опробовал этот код, но не могу заставить его работать как надо
class H f where
g :: f -> Bool
instance H (Integer -> Bool) where
g f = f 0
instance H (Char -> Bool) where
g f = f '1'
g (\x -> if x > 10 then True else False)
g (\x -> if x == '0' then True else False)
Кроме того, я понял, что для этого кода нельзя сделать тип однозначным, добавив функциональную зависимость, такую как | b -> a
, для соответствия этому правилу распространения
(FH) H (a —> b),H (a' —> b) => a = a'