2010-08-04 15 views
7

Ho un sacco di codice dello stile:a Haskell, che unisce "caso" e ">> ="

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

del senso di me che unisce il "x < - ..." e "caso x di "righe per eliminare la necessità di una variabile?

+4

Vorrei che 'case of' fosse una scorciatoia per' \ x -> case x of'. – dave4420

risposta

6

È possibile utilizzare l'operatore di binding >>= per il pipe del 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

faccio questo come

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

main = foo =<< getSomething 

La cosa bella di questo approccio è che se foo è pura, allora questo diventa

main = foo <$> getSomething 

Quindi il codice mantiene la stessa forma per un po 'diversa circostanze.

0

Se si desidera qualcosa di estremamente vicino a:

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

Poi penso che tu sia solo fuori di fortuna - non esiste una sintassi in Haskell. Ma sappi che non sei solo. Mark Jones ha definito il linguaggio abitudine di includere una sorta di monade caso con la sintassi:

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

Egli si riferisce a questo come un "caso-Da" istruzione nel definizione del linguaggio.

Problemi correlati