在 Haskell 中,如何重新排序多种类型
In Haskell, how to reorder multi kinded types
假设我有一种类型 l :: * -> * -> *
,所以我需要应用 2 种类型,例如 a
,以及 b
以获得简单类型 l a b
。
如何将类型 l :: * -> * -> *
映射到新类型 m(l) :: * -> * -> *
,其中 m(l) b a
与每个 a,b
的 l 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
假设我有一种类型 l :: * -> * -> *
,所以我需要应用 2 种类型,例如 a
,以及 b
以获得简单类型 l a b
。
如何将类型 l :: * -> * -> *
映射到新类型 m(l) :: * -> * -> *
,其中 m(l) b a
与每个 a,b
的 l 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