使用包singletons,我们有一个类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)
或
f2 :: Sing (ns :: [Symbol]) -> Proxy (xs :: [Symbol]) -> Sing (Intersect ns xs)
我必须采取哪些方式?