Haskell中自定义类型类的通用实例?

时间:2013-11-13 00:55:47

标签: haskell generic-programming

假设我有以下数据结构:

data Dezi = Dezi1 Int | Dezi2 String | Dezi3 [Dezi] deriving(Show)

class TestInterface a where
    testInt :: a -> Dezi

instance TestInterface Int where
    testInt 0 = Dezi1 0
    testInt _ = Dezi2 "Nie nula"

instance Dezi a =>  TestInterface [a] where 
    testInt xs = Dezi3 $ map (\x -> testInt x) xs

在上一个语句中,我正在尝试为我的类型类I创建通用实例,因为类型'a'是Int或String,但编译器不满意:

`Dezi' is applied to too many type arguments
In the instance declaration for `TestInterface [a]'

我是初学者,仍处于学习过程中。

谢谢!

1 个答案:

答案 0 :(得分:4)

Dezi是一种数据类型,而不是类型类。类型不是“Dezi的实例”。相反,你可能会说像

instance TestInterface a => TestInterface [a] where
  testInt xs = Dezi3 $ map testInt xs

这类似于“来列出a TestInterface的实例,查找a的实例并使用它。” < / p>