【发布时间】:2011-02-27 16:38:54
【问题描述】:
我有一个haskell 问题。 putStrLn 应该接受一个 [Char] 或一个字符串,即使我把它交给了 Compiler 先生,他仍然抱怨。
*** Expression : putStrLn line
*** Term : line
*** Type : Char
*** Does not match : [Char]
它引用的代码是这样的:
getV::[[(Char,Float)]] -> IO ()
getV [] = putStrLn ""
getV (x:xs) = do line <- getS x
putStrLn line <-- Complaining line
getV xs
getS::[(Char,Float)] -> String
getS [] = ""
getS ((c,f):str) = do a <- "(L" ++ [c] ++")" ++ getS str
return a
我确实将它剥离了一点,但它应该是完全相同的行为。 getS 确实返回一个字符串,该字符串是 putStrLn 的参数。那么问题是什么? :/
【问题讨论】:
-
只是一些格式化建议:您的代码格式错误,无法在 GHC 中运行。尝试将每一行与上面的行对齐(这样
putStrLn line的p就在line <- getS x的l的正下方。另外,如果你有-- Complaining line并离开@987654328,那就太好了@,所以这是一个合法的评论,人们可以复制粘贴你的代码。 -
是的,你说的是实话 :D 下次我会更好
-
这次为什么不能做得更好?您可以随时返回并编辑您的问题! (另外,+1 以幽默的方式接受我的挑剔:) 祝你的 Haskelling 好运!)
标签: haskell functional-programming io