我想编写一个函数,它使用getLine
并返回一个元组(整数,整数)但使用do-notation读取一些数据。像这样的东西(当然它不起作用):
fun :: (Integer, Integer)
fun = do
a <- read (getLine::Integer)
b <- read (getLine::Integer)
return (a, b)
我必须为此编写自己的 monad 吗?有什么不写新单子的解决方案吗?
编辑
所以我可以编写main
使用的函数fun
,我认为这是唯一的解决方案:
main :: IO ()
main = do
tuple <- fun
putStrLn (show tuple)
fun :: IO (Integer, Integer)
fun = do
a1 <- getLine
b1 <- getLine
let a = read (a1)
b = read (b1)
return (a, b)
以上代码有效。