假设我有一种类型l :: * -> * -> *
,例如,我需要应用 2 种类型a
,并b
获得一个简单类型l a b
。
如何将类型映射到与each相同的l :: * -> * -> *
新类型?这里不是常数。是否可以?这么想有错吗?m(l) :: * -> * -> *
m(l) b a
l a b
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