【发布时间】:2015-07-24 09:31:48
【问题描述】:
我是 Haskell 的新人,以下是我的问题:
给定这个类:
class MyClass a where
foo :: a -> [a]
然后我有一个更具体的子类:
class (MyClass a) => SubClass a where
foo param = [bar param]
bar :: a -> a
但它没有按预期工作。我期待在SubClass 的定义中设置默认实现,但事实并非如此。我需要单独为MyClass 定义实例,但这听起来很愚蠢。当我知道某些子类肯定满足某些属性时,如何实现默认实现?
更具体地说,我想用 Haskell 表达 when a class satisfies some properties, some functions for its parent can have default implementation。在我的示例中,SubClass 具有属性 bar,因此我知道 foo 肯定是以这种方式定义的。
这个问题的一个更一般的形式是,通过使用类和实例来重用是一个好主意吗?
我发现了这个帖子:Inclusion of typeclasses with default implementation in Haskell
非常接近,但仍然没有完全回答我的问题,而且它们的形式有点不同。
【问题讨论】:
-
foo的实现需要附加到foo所属的类。如果MyClass的第二个子类也尝试像这样定义foo的默认实现,您会期望发生什么? -
@ReidBarton 我想表达
implementation of foo is unknown at the point of MyClass but given some property of SubClass, the default implementation of foo can be decided。 -
然后看 Daniel Wagner 的回答,但是注意当你定义
MyClass时,你必须选择子类SubClass是什么。 -
@ReidBarton 是的。我读过那个。这不是最可取的。难道不能定义一个有约束的实例来处理吗?
标签: haskell