В последнее время я работал над API в Elm, где один из основных типов контравариантен. Итак, я googled, чтобы посмотреть, что можно делать с контравариантными типами, и обнаружил, что контравариантный пакет в Haskell определяет класс типа Divisible.
Определяется следующим образом:
class Contravariant f => Divisible f where
divide :: (a -> (b, c)) -> f b -> f c -> f a
conquer :: f a
Оказывается, мой особый тип подходит для определения класса Divisible. Хотя Elm не поддерживает классы типов, я время от времени смотрю на Haskell для некоторого вдохновения.
Мой вопрос: Существуют ли какие-либо практические применения для этого типа? Существуют ли известные API-интерфейсы в Haskell (или на других языках), которые извлекают выгоду из этого шаблона разделения? Есть ли какие-то ошибки, о которых я должен знать?
Большое спасибо за вашу помощь.