Haskell:单例中的多个操作

时间:2015-03-13 12:24:45

标签: haskell io

我试图让Haskell中的IO函数向IO发送一个变量,以便在程序的主程序中使用。下面的具体部分是让我悲伤的主要部分。

getInformation :: Int -> [String] -> IO [String]
getInformation input db
    |input == 1 = return (inputOne db)
    |input == 2 = return (inputTwo db)
    |input == 3 = return (inputThree db)
    |input == 4 = return (inputFour db)
    |input == 5 = return (inputFive db)
    |input == 6 = return (inputSix db)
    |input == 7 = return (inputSeven db)
    |input == 8 = return (inputEight db)

inputOne ... inputEight all返回IO [String]的值,我试图让返回基于[String]而不是IO [String]。 理想情况下,我想为每个案例尝试这样的事情,但我不确定如何解决这个问题:

db2 <- (inputOne db)
return (db2)

我试过按照以下方式进行实验:

|input == 1 = {db2 <- (inputOne db)
               return (db2)}

然而,即使我认为这是正确的方向,这也会出错并且不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

如果你想要一个阻止,你需要实际的do关键字:

| input == 1 = do db2 <- inputOne db; return db2

你也可以像

那样构建它
| input == 1 = do
  db2 <- inputOut db
  return db2

如果您愿意。

请注意,将结果放入变量并立即返回相同的内容与

相同
| input == 1 = inputOne db