我已经实现了这样的地图类型类型族
type family MapT (t :: * -> *) (e::[*])
type instance MapT t '[] = '[]
type instance MapT t (a ': as) = (t a) ': (MapT t as)
它与类型构造函数一起工作:
type MList = MapT Maybe '[Int, String]
给
'[Maybe Int, Maybe String]
但是,我尝试
type M a = Maybe a
type MList' = MapT M '[Int, String]
它不起作用。
我也尝试过类型家庭
type family M a
type instance M a = Maybe a
但它仍然不起作用,说
`Type synonym `M` should have 1 argument.
有没有一种方法可以解决此问题而无需创建新的数据类型(或新的类型)?
不幸的是,没有创建新数据类型(或新类型)的方法就无法解决。您正在寻找的似乎是类型级别的lambda(就像您在许多与Haskell相关的正式公式中一样,例如System Fw及其扩展名),但是不幸的是,Haskell没有类型级别的lambda。类型同义词可能看起来可以用于此目的,但是不幸的是,当提及它们时,必须完全应用它们。正如您自己提到的那样,您需要改用新类型或数据类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句