Haskell:无法将类型'Char'与'[Char]'匹配预期类型:[String]实际类型:String

时间:2018-06-02 13:53:18

标签: haskell

我有这段代码:

censName :: String -> String
censName [] = []
censName xs = unwords(censWords(words xs))

censWords :: [String] -> [String]
censWords [] = []
censWords (x:xs) = if isUpper(head x) then replace(tail x) else censWords xs 

replace :: String -> String
replace [] = []
replace (x:xs) = '*':replace xs

错误说:

Couldn't match type ‘Char’ with ‘[Char]’
  Expected type: [String]
    Actual type: String

我的问题是:为什么!?我的意思是,在替换(尾部x)x是一个字符串,为什么它需要[String]?

我找不到任何适合我在这里发布的类似问题的问题。

1 个答案:

答案 0 :(得分:2)

censWords :: [String] -> [String]
                      -- ^^^^^^^^ expected
censWords (x:xs) = if .. then replace(tail x) else ..
                           -- ^^^^^^^^^^^^^^^ actual value

返回的值是单个字符串,但是需要一个字符串列表。

问题不是对replace的调用,而是它返回的错误类型的值比预期的值。