哈斯克尔的简单输入误解

时间:2012-05-22 18:38:56

标签: haskell syntax input

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'

1 个答案:

答案 0 :(得分:4)

你错过了括号。

...
else do return (length line)

但是,也存在类型错误。您的edasaNr功能的类型是什么? 它必须做一些IO并在给出参数时返回Int

所以最好写成:

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

还表明你没有使用n参数(所以它可以有任何类型)。