有没有办法在哈斯克尔的主外部接收 IO?



这可能是一个愚蠢的问题,但是当我尝试在main函数之外获取输入时,我遇到了错误:

menu2Players :: String -> String -> (String, String)
menu2Players player1 player2 = do
putStrLn("Qual o nome do primeiro jogador?n")
player1 <- getLine
putStrLn("Qual o nome do segundo jogador?n")
player2 <- getLine
return (player1, player2)

我得到的错误

IO 操作"main">

未在模块"main"中定义

我该怎么做才能解决这个问题?

在 Haskell 中,如果你想在一个函数中做 IO,它需要返回IO

menu2Players :: String -> String -> IO (String, String)
menu2Players player1 player2 = do
putStrLn "Qual o nome do primeiro jogador?n"
player1 <- getLine
putStrLn "Qual o nome do segundo jogador?n"
player2 <- getLine
return (player1, player2)

为什么您需要返回IO的详细信息有点棘手,但您可以在此处了解:http://learnyouahaskell.com/input-and-output

(有点晚了,但是...有效的代码,我只是需要IO返回。

menu2Players = do
putStrLn "Qual o nome do primeiro jogador?n"
player1 <- getLine
putStrLn "Qual o nome do segundo jogador?n"
player2 <- getLine
return (player1, player2)

最新更新