首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对比式家庭

对比式家庭
EN

Stack Overflow用户
提问于 2021-06-06 18:52:41
回答 2查看 91关注 0票数 0

我在haskell有以下类型的家庭:

代码语言:javascript
复制
type family Foo (a :: Bar) :: * where

然后是一堆平等。我想对类返回设置一个约束,以确保它们都是类型类型的实例。我怎么能这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-06 18:59:18

在Haskell,最好不要那样做。(还请参阅在数据声明中对类型变量施加约束的愿望。)您应该将约束放在实际要使用的位置。在需要时,如果缺少类型检查,它仍然会被调用,但是它将允许不需要它的事情变得更加灵活。

票数 2
EN

Stack Overflow用户

发布于 2021-06-06 19:06:53

好像你在找

代码语言:javascript
复制
class (YourConstraint (Foo a)) => Fooish (a :: Bar) where
  type Foo a :: Type

正如Carl所指出的,这有点类似于旧的数据声明样式

代码语言:javascript
复制
data C a => D a = D ...

这被广泛认为是个坏主意,因为不可能使用约束,它所做的就是防止构建不服从约束的值。

但是与这些数据声明不同,对关联类型家族的约束是有用的,因为有一种简单的方法可以在需要时获得约束:只需提到Fooish即可。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67862635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档