【发布时间】:2011-10-19 17:30:50
【问题描述】:
我一直在摆弄 Haskell 中列表的通用类型类。
class HasEmpty a where
empty :: a
isEmpty :: a -> Bool
class HasEmpty (l a) => List l where
cons :: a -> l a -> l a
uncons :: l a -> (a, l a)
为了让您了解它的工作原理,以下是[] 的实例:
instance HasEmpty [a] where
empty = []
isEmpty [] = True
isEmpty _ = False
instance List [] where
cons = (:)
uncons (x:xs) = (x,xs)
但是,这会引发错误:
Not in scope: type variable 'a'
这是由约束HasEmpty (l a) 引起的。我对这个特定的例子并不是非常感兴趣,但我对这个概念很感兴趣。 HasEmpty 是 * 类型的类,而 List 是 * -> * 类型的类。 我是否可以创建与它所约束的类型类不同类型的类型类约束?
【问题讨论】:
标签: haskell typeclass type-constraints