Haskell:单个案例中的多个操作

Haskell: Multiple Actions in Single Case

我正在尝试在 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 所有 return IO [String] 的值,我试图让 return 基于 [String] 而不是 IO [String]。 理想情况下,我想为每种情况尝试这样的事情,但我不确定如何去做:

db2 <- (inputOne db)
return (db2)

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

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

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

如有任何帮助,我们将不胜感激。

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

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

你也可以像这样构造它

| input == 1 = do
  db2 <- inputOut db
  return db2

如果你愿意。

注意将结果放入变量并立即返回相同的东西与

相同
| input == 1 = inputOne db