首页 > 解决方案 > 有没有办法在 Haskell 的 main 之外接收 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' 中定义</p>

我能做些什么来解决这个问题?

标签: haskelliomainio-monaddo-notation

解决方案


在 Haskell 中,如果你想在一个函数中做 IO,它需要 return 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


推荐阅读