如何在Haskell中调试“无法匹配预期类型...对抗推断类型”?

时间:2011-03-06 19:38:38

标签: haskell

这是我收到的错误消息:

Couldn't match expected type `[(Char, Int)]'
       against inferred type `(a, b)'
In the pattern: (c, n)
In the definition of `decode':
    decode (c, n) = map (\ (c, n) -> replicate n c)

这是我的代码

decode :: [(Char,Int)] -> String
decode (c, n) = map (\ (c, n) -> replicate n c)

1 个答案:

答案 0 :(得分:2)

模式(c,n)的类型(a,b)与类型[(Char, Int)]不匹配。换句话说,你说的是参数列表是对,但你的模式只匹配一对。

同样,map的返回值将是字符串列表,而不是类型签名所暗示的单个字符串。如果您想要一个字符串,则需要使用concatMap

所以你的代码看起来像这样:

decode pairs = concatMap (\ (c, n) -> replicate n c) pairs

或只是

decode = concatMap (\ (c, n) -> replicate n c)