1

有効な文字列を入力すると文字列の内容を読み取る解析関数にユーザーの入力を送信する無限ループを作成しようとしています。

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

私の質問は、ユーザー入力を解析関数に送信するにはどうすればよいですか。エラーが発生しました

Iで推論タイプIO t を言うと、次のparse :: String -> String ように変更します。

parse:: IO String -> String

次に、推論type [a]などという別のエラーが発生します。

4

1 に答える 1

5

この行

入力を解析する

文字列を返しIOますが、ブロック内にいるため、「何か」を返す必要がありますdo。だからあなたは代わりに書くことができます

 print (parse input)

関数が完了していませparseん。パターンケースを追加する必要があります[]

タイプを変更したい場合はparse、である必要がありますString -> IO String。しかし、それは良いプログラミングスタイルではありません。不純物が必要ない場合は、不純物があってはならないからです:-)

于 2013-02-24T21:23:59.577 に答える