2010-08-04 20 views
7

que tienen una gran cantidad de código del estilo:en Haskell, la combinación de "caso" y ">> ="

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

Cualquier forma de mí la combinación de la "< x - ..." y "caso x de "líneas para eliminar la necesidad de una variable?

+4

Deseo 'case of' era la abreviatura de' \ x -> case x of'. – dave4420

Respuesta

6

Puede usar el operador de vinculación >>= para conectar el 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

Lo hago como

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

main = foo =<< getSomething 

Lo bueno de este enfoque es que si foo es pura, entonces esto se convierte en

main = foo <$> getSomething 

Así que el código conserva la misma forma para algo que varía circunstancias.

0

Si quieres algo extremadamente cerca de:

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

entonces creo que está justo fuera de suerte - no hay tal sintaxis en Haskell. Pero sé que no estás solo. Mark Jones define el lenguaje hábito de incluir una especie de caso monádico con la sintaxis:

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

Se refiere a esto como una "caja De" declaración en la definición del lenguaje.

Cuestiones relacionadas