函数不会从两个类型类中读取

时间:2015-09-04 10:16:23

标签: haskell

我宣布了一个班级和两个实例:

class A a where
  name :: a -> String
  dMs :: a -> [(String,String,Double)]

instance A B where
  name s = B s
  dMs a = dM a

instance A C where
  name s = C s
  dMs a = dM a

dM :: (A a) => [a] -> [(String,String,Double)]

但是当我用上面的标题编译我的时候我得到一个错误:

Couldn't match expected type ‘[a0]’ with actual type ‘C’
    In the first argument of ‘dM’, namely ‘a’
    In the expression: dM a

我希望dM函数能够获取BC类型的列表。

如果我将标题更改为仅接受一种类型(仅B或仅C),则代码可以编译并且无故障地工作。

1 个答案:

答案 0 :(得分:0)

我现在就开始工作了。

class A a where
  name :: a -> String
  dMs :: [a] -> [(String,String,Double)]

instance A B where
  name s = B s
  dMs a = dM a

instance A C where
  name s = C s
  dMs a = dM a

dM :: (A a) => [a] -> [(String,String,Double)]

那么它在Class中指定它应该采用a的列表,如下所示:[a]

感谢大家的帮助。