我在haskell有以下类型的家庭:
type family Foo (a :: Bar) :: * where然后是一堆平等。我想对类返回设置一个约束,以确保它们都是类型类型的实例。我怎么能这么做?
发布于 2021-06-06 18:59:18
在Haskell,最好不要那样做。(还请参阅在数据声明中对类型变量施加约束的愿望。)您应该将约束放在实际要使用的位置。在需要时,如果缺少类型检查,它仍然会被调用,但是它将允许不需要它的事情变得更加灵活。
发布于 2021-06-06 19:06:53
好像你在找
class (YourConstraint (Foo a)) => Fooish (a :: Bar) where
type Foo a :: Type正如Carl所指出的,这有点类似于旧的数据声明样式
data C a => D a = D ...这被广泛认为是个坏主意,因为不可能使用约束,它所做的就是防止构建不服从约束的值。
但是与这些数据声明不同,对关联类型家族的约束是有用的,因为有一种简单的方法可以在需要时获得约束:只需提到Fooish即可。
https://stackoverflow.com/questions/67862635
复制相似问题