2010-08-04 12 views
7

Ich habe eine Menge Code des Stils kombiniert:in Haskell, "Fall" und ">> ="

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

Jede Art und Weise von mir den "x < - ..." Kombinieren und „-Fall x von "Linien, um die Notwendigkeit für eine Variable zu beseitigen?

+4

Ich wünschte 'Fall von' war Kurzschrift für '\ x -> Fall x von'. – dave4420

Antwort

6

Sie könnten den Bindeoperator >>= verwenden, um die x zu leiten.

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

Ich tue dies als

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

main = foo =<< getSomething 

Das Schöne an diesem Ansatz ist, dass, wenn foo rein dann wird dies

main = foo <$> getSomething 

So ist der Code, der die gleiche Form beibehält, für etwas variiert Umstände.

0

Wenn Sie etwas ganz in der Nähe wollen:

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

Dann denke ich, du bist einfach kein Glück - dort in Haskell keine solche Syntax ist. Aber du weißt, dass du nicht alleine bist. Mark Jones definiert die Habit Sprache eine Art monadischen Fall mit der Syntax enthalten:

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

Er bezeichnet dies als „Case-Aus“ Anweisung in der Sprachdefinition.