是否有一个库使用ConstraintKinds来概括所有基类型类以允许约束?

时间:2012-10-02 19:57:04

标签: haskell constraint-kinds

我们可以使用扩展ConstraintKinds来扩展基类型类的功能以允许约束。例如,我们可以将未装箱的矢量作为仿函数:

class Functor f where
    type FunctorConstraint f x :: Constraint
    type FunctorConstraint f x = ()
    fmap :: (FunctorConstraint f a, FunctorConstraint f b) => (a -> b) -> f a -> f b

instance Functor VU.Vector where
    type FunctorConstraint VU.Vector x = VU.Unbox x
    fmap = VU.map

(有关详细信息,请参阅这些blog posts。)

我注意到自己在这种新风格中实现了相当大部分的基本库类型(基本上我希望能够在未装箱的向量和列表之间互换),并且我想知道这个库是否已经存在了我应该使用,或者如果我应该将我的内容添加到hackage中。


编辑:此外,是否有计划将此直接添加到基地?它似乎不应该通过直接更新类定义来破坏其他任何东西。

1 个答案:

答案 0 :(得分:6)

由于听起来没有其他人拥有图书馆,我已将我所做的工作转换为名为ConstraintKinds和uploaded it to github的单独项目。它目前非常简单,可能还没有涵盖任何其他人的用例,但您可以随意进行更改或提交请求。

在将项目上传到hackage之前,我可能会等待更多关于这是否是一个好方向的反馈。