2010-08-04 57 views
7

我有很多风格的代码:在Haskell,结合“案例”和“>> =”

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

我的任何方式相结合的“X < - ...”和“案件“消除对变量的需求?

+4

我希望'case'是'\ x - > case x of'的简写。 – dave4420 2010-08-04 12:08:53

回答

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" 
0

我这样做,因为

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

main = foo =<< getSomething 

这种方法的好处是,如果foo是纯那么这将成为

main = foo <$> getSomething 

因此,代码保留相同的形状有所改变情况。

0

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

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

那么我认为你只是运气不好 - 有在Haskell没有这样的语法。但知道你并不孤单。马克·琼斯定义的习惯语言,包括一种一元情况下的语法:

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

他指这是一个“案例从”在语言定义语句。