如何将String读取和IO发送到用户定义的函数

时间:2013-02-24 21:13:00

标签: haskell

我试图创建一个无限循环,我将用户的输入发送到解析函数,该函数在输入有效字符串时读取字符串的内容

main :: IO ()
main = do
            putStrLn ("\n" ++ "This is blah :" ++ "\n" ++ "=================================")
            putStrLn ("Valid Inputs" ++ "\n" ++ "=================================")
            loop 

--Infinite Loop
---------------------           
loop :: IO()
loop = do 
            input <- getLine
            if input == ""
                then return()
                else do 
                    parse input
                    print input
                    loop



--Main Parsing Function (Does't work)
--------------------
--parse:: String -> String 
--parse (x:xs) = if x == 'a' then 'b':parse xs
               --else x:parse xs

我的问题是如何将用户输入发送到我的解析功能。我收到了错误

说推断类型IO tparse :: String -> String 我把它改为:

parse:: IO String -> String

然后又给我一个错误说 推断type [a]等等。

1 个答案:

答案 0 :(得分:5)

这一行

  

解析输入

返回一个String,但它应该返回IO“something”,因为你在do - 块中。所以你可以写一下

 print (parse input)

您的parse功能尚未完成,您必须为[]添加模式案例

如果您想更改parse的类型,则必须为String -> IO String。 但这不是一个好的编程风格,因为在不需要杂质的情况下,不应该有杂质: - )