我有这段代码,但是这个错误出现了,我不知道为什么:
Couldn't match type 'Char' with '[Char]'
Expected type: [String]
Actual type: String
In the return type of a call of 'tarefa'
In the first argument of 'unlines', namely '(tarefa (lines inp))'
In the first argument of 'putStrLn', namely
'(unlines (tarefa (lines inp)))'
main = do inp <- getContents; putStrLn (unlines (tarefa (lines inp)))
tarefa :: [String]-> String
tarefa tab = let board = getBoard tab
valid = valBoard board
ym = length board
xm = length (head board)
(r:p:s) = drop (length board) tab
in if valid/=0 then [show valid]
else if not (coordOK xm ym r)
then [show (ym +1)]
else if not (progOK p)
then [show (ym+2)]
else if s /= []
then [show (ym+3)]
else ["OK"]
答案 0 :(得分:4)
unlines
需要一个字符串列表,它将与'\n'
个字符一起加入。但是,tarefa
的类型声明表示它返回一个String。
查看您的实现,看起来tarefa
意味着返回一个字符串列表;我认为你只需要修改类型声明来反映这一点。
涉及字符串的类型错误可能令人困惑,因为String
是[Char]
的类型同义词,并且编译器在错误消息中引用的是哪一个不一致。
答案 1 :(得分:1)
两个问题:
您认为这个表达的类型是什么:
[ “OK”]
(提示:你可以问ghci)?
String
?