0
import System.IO
import Data.Char
edastaNr n
   = do
      putStrLn "Anna rida:"
      line <- getLine
      if null line
         then return () 
         else do return length(line)

谁能解释为什么最后一行不正确以及如何修复它?我没有意识到..错误是:

Couldn't match expected type `IO ()' with actual type `[a0] -> Int'
4

1 回答 1

4

你缺少括号。

...
else do return (length line)

但是,也有类型错误。你的edasaNr函数类型是什么?Int当给定一个参数时,它必须做一些 IO 并返回一个, 。

所以最好写成:

edastaNr :: a -> IO Int
edastaNr n = do
    putStrLn "Anna rida:"
    line <- getLine
    if null line
     then return 0
     else return $ length line

这也表明您不使用该n参数(因此它可以具有任何类型)。

于 2012-05-22T18:40:54.230 回答