Haskell 部分应用类型族
给定以下类型族:Haskell 部分应用类型族,haskell,Haskell,给定以下类型族: type family C a b :: Constraint 这有两种类型: C :: * -> * -> Constraint 而C Int无效(不能部分应用类型族) 我们可以这样写: class (C a b) => C' a b instance (C a b) => C' a b 现在我可以写了: C' Int T' Int 属于以下类型: C' Int :: * -> Constraint. 我的问题是,假设我有 t
type family C a b :: Constraint
这有两种类型:
C :: * -> * -> Constraint
而C Int
无效(不能部分应用类型族)
我们可以这样写:
class (C a b) => C' a b
instance (C a b) => C' a b
现在我可以写了:
C' Int
T' Int
属于以下类型:
C' Int :: * -> Constraint.
我的问题是,假设我有
type family T a b
i、 e.类型:
T :: * -> * -> *
有没有一种方法可以定义T'
这样我就可以写:
C' Int
T' Int
类型:
T' :: * -> *
很像我对约束类型所做的那样?我非常确定GHC不允许对类型族进行这种操作。如果类型族以类型
约束结尾,这是可能的,尽管有些类型带有一些类欺骗,如图所示。我只是想知道,我是否可以将这个诡计扩展到不以类型约束结尾的类型族,人们可以使用type-family ta::*->Constraint
,但是实例只能依赖于a
,例如type-instance t Int=K
其中K
是一个单参数类型类C
和T
不是C:*->*->约束
和T:*->*->*
-如果是,您就不会有这个问题,因为它们已经是内射类型构造函数了。类型族的种类目前无法表达,但它们不是函数箭头。您可以编写newtype T'ab=T'(T'ab)
,但它并不是真正有用的。您不想成为普通的类型构造函数吗?比如Int::*->*