1

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

如何将类型映射到与each相同的l :: * -> * -> *新类型?这里不是常数。是否可以?这么想有错吗?m(l) :: * -> * -> *m(l) b al a ba,ba,b

4

1 回答 1

5
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 
于 2019-12-25T14:53:34.020 回答