为类型类创建一个实例会抛出:"无法将预期类型'f'与实际类型匹配"

时间:2016-07-26 15:52:38

标签: haskell

我是Haskell的新手,我正在尝试学习如何使用classe,

我有课:

class SomeClass f where
doSome :: Integer -> f

数据类型:

 data SomeData = D1 Integer 
                | D2 SomeData SomeData 

我试图创建实例:

instance SomeClass SomeData where
doSome x = D1 x

但是ghci给了我错误:

  

无法将预期类型“f”与实际类型“SomeClass”匹配

我已经看到有关此问题的一些问题,但我无法让它们为我工作。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

D1之后使用D2在此处无效:

data SomeData = D1 Integer 
                | D2 D1 D1
                     ^^^^^

D1之后D2发生D1您需要一个类型,但data SomeData = D1 Integer | D2 SomeData SomeData 是一个函数。

你可能想写:

do

通过此更改,您的代码将进行编译。 (我还将名称data SomeData = D1 Integer | D2 SomeData SomeData class SomeClass f where foo :: Integer -> f instance SomeClass SomeData where foo x = D1 x 更改为另一个不是Haskell关键字的名称):

for d in my_list:
    for k in d:
        if k == 'account':
            v = []
            for d2 in d[k]:
                if d2 not in v:
                    v.append(d2)
            d[k] = v