我有一种感觉这是不可能的,但我会喜欢一些输入,看看是否有一些我缺少的扩展或技术。
我有一个类型类的通用实例,它定义了一些默认方法:
class TestClass a where
foo :: a -> Maybe Text
bar :: a -> [Int]
instance TestClass a where
foo _ = Nothing
bar _ = []
data SpecificType = SomeValue | OtherValue
instance TestClass SpecificType where
foo SomeValue = Just "Success"
foo OtherValue = Just "Other Success"
我认为这已经需要OverlappingInstances
,但问题是TestClass
的{{1}}实例未实现SpecificType
。我只想声明第二个实例的一部分,并使用其余的默认实现。有没有办法实现这个目标?
答案 0 :(得分:6)
在Haskell 98中,您可以将default implementations放入class
定义:
class TestClass a where
foo :: a -> Maybe Text
foo _ = Nothing -- default implementation
bar :: a -> [Int]
bar _ = [] -- default implementation
现在,对于您自己未实现instance
或foo
的所有bar
,它将采用默认实现。