首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在“不”约束运算符?

问是否存在“不”约束运算符?
EN

Stack Overflow用户
提问于 2014-12-11 13:19:18
回答 1查看 89关注 0票数 4

假设我想编写一个函数,用于将列表、列表列表、列表列表等简化为仅列表。我可以写如下:

代码语言:javascript
复制
{-# LANGUAGE TypeFamilies #-}
class Flattenable a where
  type Flattened a
  flatten :: a -> Flattened a

instance NotFlattenable a => Flattenable [a] where
  type Flattened [a] = [a]
  flatten = id

instance Flattenable a => Flattenable [a] where
  type Flattened [a] = Flattened a
  flatten = concat . map flatten

其中,NotFlattenable a是一些限制在没有Flattenable实例的a上的约束。NotFlattenable是一个合法的约束吗?我该怎么写呢?(注意,没有NotFlattenable约束会使这两个实例重叠)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 13:29:32

不,这是不可能的,因为Haskell的类型类总是打开的:编译器永远无法证明某些实例不存在,因为以后可能会有人添加它。

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

https://stackoverflow.com/questions/27423856

复制
相关文章

相似问题

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