【发布时间】:2012-03-21 23:53:33
【问题描述】:
我正在尝试以归纳方式定义一对类实例。那就是:
class Foo a b | a -> b where
foo :: a -> b
instance (not?)Foo a => Bar a b
foo x = ...
instance Foo a => Bar a b
foo x = ...
第一个实例确定基本操作,第二个实例递归调用 foo。有没有办法做到这一点?一个很好的例子是展平一个列表,在第一种情况下它是标识函数,在第二种情况下它是 concat 的递归应用。
【问题讨论】:
-
请注意,在 Haskell 中,不可能确定给定类型 不是 给定类型类的实例,因为其他人可以用一些提供实例的他们自己的代码。