在haskell中,结合“case”和“>> =”

时间:2010-08-04 06:40:10

标签: haskell case

我有很多风格的代码:

do
  x <- getSomething
  case x of
    this -> ...
    that -> ...
    other -> ...

我将“x&lt; - ...”和“case x of”行组合在一起以消除对变量的需求?

3 个答案:

答案 0 :(得分:6)

您可以使用绑定运算符>>=来管道x

import System.Environment (getArgs)

main :: IO ()
main = getArgs >>= process
    where process ["xxx"] = putStrLn "You entered xxx"
          process ["yyy"] = putStrLn "You entered yyy"
          process _       = putStrLn "Error"

答案 1 :(得分:0)

我这样做

foo "this" = return 2
foo "that" = return 3

main = foo =<< getSomething

这种方法的好处在于,如果foo是纯粹的,那么这就变成了

main = foo <$> getSomething

因此代码在不同情况下保持相同的形状。

答案 2 :(得分:0)

如果你想要一些非常接近的东西:

getSomething >>= caseOf
    this  -> expr1
    that  -> expr2
    other -> expr3

然后我认为你只是运气不好--Haskell中没有这样的语法。但要知道你并不孤单。 Mark Jones将习惯语言定义为包含一种带有语法的monadic案例:

case<- getSomething of
    Nothing -> expr1
    Just x  -> expr2 x

他将此称为语言定义中的“Case-From”语句。