Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 部分应用类型族_Haskell - Fatal编程技术网

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::*->*