我试图创建一个无限循环,我将用户的输入发送到解析函数,该函数在输入有效字符串时读取字符串的内容
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 t
在parse :: String -> String
我把它改为:
parse:: IO String -> String
然后又给我一个错误说
推断type [a]
等等。
答案 0 :(得分:5)
这一行
解析输入
返回一个String,但它应该返回IO
“something”,因为你在do
- 块中。所以你可以写一下
print (parse input)
您的parse
功能尚未完成,您必须为[]
添加模式案例
如果您想更改parse
的类型,则必须为String -> IO String
。
但这不是一个好的编程风格,因为在不需要杂质的情况下,不应该有杂质: - )