假设我想编写一个函数,用于将列表、列表列表、列表列表等简化为仅列表。我可以写如下:
{-# 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约束会使这两个实例重叠)
发布于 2014-12-11 13:29:32
不,这是不可能的,因为Haskell的类型类总是打开的:编译器永远无法证明某些实例不存在,因为以后可能会有人添加它。
https://stackoverflow.com/questions/27423856
复制相似问题