Haskell:模式匹配错误与我自己的类型

时间:2016-10-05 22:56:29

标签: haskell pattern-matching

我试图从用户输入字符串中取出单个字母,按照一组规则然后给出编码字符串。参数采用字符串,密码也是字符串和整数。我在类型匹配方面遇到了一些错误。这是我的代码

@props: background-color, color;
@val: red;
@val2: green;
.properties {...}
.demo {
  border-color: @val2;
  .properties(@props, @val)
}
.demo2 {
  .properties(@props, @val2)
}

这是Cipher encodeMessage :: [Char]->Cipher->Int -> [Char] encodeMessage (x:xs) [] _ = (x:xs) encodeMessage (x:xs) cp n | n>=0 = [(offsetRight (mod n 26) cp)!!((letterToNum x)-1)] ++ encodeMessage(xs cp n) | otherwise = [(offsetLeft (26-(mod n 26)) cp)!!((letterToNum x)-1)] ++ encodeMessage(xs cp n) 的结构。 这是错误

type Cipher = [Char]

1 个答案:

答案 0 :(得分:2)

encodeMessage(xs cp n)表示函数xs已应用于cpn,然后将其结果作为单个参数提供给encodeMessage。嗯,这显然是垃圾,因为xs根本不是一个功能!此外,encodeMessage有三个参数,而不是一个,这就是GHC在那里非常清楚地告诉你的。

你显然想要encodeMessage xs cp n,BTW等同于以下所有内容:

((encodeMessage xs) cp) n
((encodeMessage xs) cp) (n)
((encodeMessage) xs) (cp) n
...

以及semantically equivalent

encodeMessage (xs, cp, n)

...或,more precisely

uncurry (uncurry encodeMessage) ((xs, cp), n)

但它完全不等同于encodeMessage (xs cp n)