在 Haskell 中,如何重新排序多种类型

In Haskell, how to reorder multi kinded types

假设我有一种类型 l :: * -> * -> *,所以我需要应用 2 种类型,例如 a,以及 b 以获得简单类型 l a b

如何将类型 l :: * -> * -> * 映射到新类型 m(l) :: * -> * -> *,其中 m(l) b a 与每个 a,bl a b 相同?这里 a,b 不是常量。可能吗?这样想有错吗?

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