ask :: String -> IO String ask s = putStrLn s >> getLine f :: IO String f = ask "What's your name ?" >>= \name -> putStrLn "Write something." >>= \_ -> getLine >>= \string -> putStrLn ("Hello " ++ name ++ " you wrote " ++ string) >>= \_ -> return name g :: IO String g = do name <- ask "What's your name ?" putStrLn "Write something." string <- getLine putStrLn ("Hello " ++ name ++ " you wrote " ++ string) return name -- main = f main = g