Полиморфные виды - это расширение системы типа Haskell, поддерживается UHC, позволяя
data A x y = A (y x)
чтобы быть напечатан (созван?) как a -> (a -> *) -> *. Для чего они полезны?
Ответ 1
Одним из возможных примеров использования может быть использование conal TypeCompose для компоновки монадных трансформаторов в стиле point-free.
type MyT = StateT Foo :. MaybeT :. ContT Bar
(как пример, я понятия не имею, что делать с этими foos и барами..)
Вместо:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(это будет иметь тот же результат, кроме newtype -wrappers)
В настоящее время вам нужно будет дублировать код комбинаторов для разных видов, и это расширение отменяет повторение и позволяет использовать один кусок кода для их правильного использования.
Таким образом, общая причина добавления полиморфных видов к Haskell заключается в улучшении опыта программирования на уровне. В настоящее время программирование уровня уровня в Haskell происходит по принципиально нетипизированному уровню kind. Более богатый родной язык упростит программирование уровня в Haskell.
Более конкретным примером может быть удаление (динамического) ограничения Typeable из генериков стиля SYB (
Ответ 3
Они полезны для определения функций, которые работают над конструкторами данных с произвольной arity, конечно!
Конкретным примером может быть функция, которая при задании конструктора данных с произвольной arity возвращает новый конструктор данных, который обертывает данный конструктор в Some().