В Haskell, как изменить порядок множественных типов

Скажи, что у меня есть тип l :: * -> * -> *, поэтому мне нужно применить 2 типа, например a, а также b получить простой тип l ab.

Как я могу сопоставить тип l :: * -> * -> * в новый тип m(l) :: * -> * -> * где m(l) b a означает то же, что и l ab для каждого a,b? Вотa,bне являются константами. Является ли это возможным? Это неправильно думать об этом?

1 ответ

Решение
type M l a b = l b a 

newtype M l a b = M (l b a)

Или не взяв l как параметр

data L a b = ... 

newtype M a b = M (L b a) 

type M a b = L b a

Редактировать:

type M l a b = l b a 

data L a b = L (a Int) (b Int)

type Z = M L Maybe []

Более того, вы также можете давать явные добрые подписи

type M  (l :: k1 -> k2 -> *) (a :: k2) (b :: k1) = l b a 
Другие вопросы по тегам