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

Veg*_*512 1 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
Run Code Online (Sandbox Code Playgroud)

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

IO tparse :: String -> String I中说推断类型将其更改为:

parse:: IO String -> String
Run Code Online (Sandbox Code Playgroud)

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

kaa*_*aan 5

这条线

解析输入

返回一个String,但它应返回IO"something",因为你在do-block中.所以你可以改写

 print (parse input)
Run Code Online (Sandbox Code Playgroud)

您的parse功能不完整,您必须添加一个模式案例[]

如果你想改变你的类型parse,那就必须如此String -> IO String.但这不是一个好的编程风格,因为不需要杂质,不应该有杂质:-)