Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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,使用package,我们有一个SingI类和类型级别列表的实例: instance SingI '[] instance forall a (n1 :: a) (n2 :: [a]). (SingI n1, SingI n2) => SingI (n1 : n2) 似乎对于列表有SingI约束,我们可以在某种程度上得到子列表的相同约束。所以我想找到一种方法 也就是说,我需要函数之类的东西 f1 :: Sing (ns :: [Symbol]) -> Proxy (xs :

使用package,我们有一个SingI类和类型级别列表的实例:

instance SingI '[]
instance forall a (n1 :: a) (n2 :: [a]).
     (SingI n1, SingI n2) => SingI (n1 : n2)
似乎对于列表有SingI约束,我们可以在某种程度上得到子列表的相同约束。所以我想找到一种方法

也就是说,我需要函数之类的东西

f1 :: Sing (ns :: [Symbol]) -> Proxy (xs :: [Symbol]) -> Sing (ns :\\ xs)


我必须用哪种方法才能做到这一点?

什么是
:\\
交叉
?假设它们是归纳型族,则可以通过归纳编写任一函数。请注意,
SingI
类实际上根本不应该包含在这里。此外,如果
:\\
Intersect
是由
单例
定义的失效符号,它们几乎肯定已经有值级别变量,因此您不需要做任何事情。是的,它们是来自
单例
的类型族。它们有价值级别的变体。但是我没有为第二个参数
xs
。从另一方面来说,我理解并可以“用手”证明
(:\\)
相交
都给我子列表。我可以证明,如果列表也属于任何子列表的SingI
。但是我不知道如何告诉编译器以及如何为
Sing(sublist)
获取这个值,我没有注意到第二个参数是
Proxy
,而不是
Sing
<代码>代理(xs::[Symbol])
不包含关于实际是哪个
[Symbol]
的信息,因此无法执行此操作。换句话说,具有这些类型的函数是无人居住的。事实上,您可以从
SingI(x:xs)
证明
singixs
,但是您没有
SingI
约束。您必须将类型更改为
(SingI xs)=>…
。什么是
:\\
相交
?假设它们是归纳型族,则可以通过归纳编写任一函数。请注意,
SingI
类实际上根本不应该包含在这里。此外,如果
:\\
Intersect
是由
单例
定义的失效符号,它们几乎肯定已经有值级别变量,因此您不需要做任何事情。是的,它们是来自
单例
的类型族。它们有价值级别的变体。但是我没有为第二个参数
xs
。从另一方面来说,我理解并可以“用手”证明
(:\\)
相交
都给我子列表。我可以证明,如果列表也属于任何子列表的SingI
。但是我不知道如何告诉编译器以及如何为
Sing(sublist)
获取这个值,我没有注意到第二个参数是
Proxy
,而不是
Sing
<代码>代理(xs::[Symbol])
不包含关于实际是哪个
[Symbol]
的信息,因此无法执行此操作。换句话说,具有这些类型的函数是无人居住的。事实上,您可以从
SingI(x:xs)
证明
singixs
,但是您没有
SingI
约束。您必须将类型更改为
(SingI xs)=>…
f2 :: Sing (ns :: [Symbol]) -> Proxy (xs :: [Symbol]) -> Sing (Intersect ns xs)