【发布时间】:2019-10-14 22:13:36
【问题描述】:
这可能是一个愚蠢的问题,但是当我尝试在 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”中定义
我能做些什么来解决这个问题?
【问题讨论】:
-
你的函数实际上返回了一个
IO (String, String)类型的值,所以你的类型签名会导致错误。缺少main是一个完全独立的问题,但是如果您尝试实际编译文件而不是将其加载到 GHCi 中,则它需要具有main值。 -
程序有一个main但是我想把这个函数返回给另一个函数
-
嗯,这应该不是问题。不过,它必须是
IO类型的函数(或action)。 -
您发布的代码与出现的错误无关。
-
return在 Haskell 中与您在其他语言中会发现的return不同。它是一个函数,而不是关键字,因此对控制流没有影响。 Quick demonstration
标签: haskell io main io-monad do-notation