Haskell Hero
Haskell Hero es un manual interactivo del lenguaje Haskell para principiantes.
| 
                         |       
                        Entrada y salida II>>, >>=, return
En la lección Entrada y salida hemos hablado de la construcción  
imprime = do putStrLn "abc"
             putStrLn "def"
             putStrLn "ghi"
es decir, imprime "abc", después imprime "def" y al fin "ghi". Esta secuencia de ordenes también la podemos escribir con el operador >>. La evaluación de la expresión accion1 >> accion2 >> accion3 se evalúa de manera siguiente: Primero se evalúa accion1, después accion2 y al fin accion3. En nuestro ejemplo entonces será:
putStrLn "abc" >> putStrLn "def" >> putStrLn "ghi" 
En el ejemplo anterior las acciones se realizaron independientemente. Sin embargo, nosotros queremos por ejemplo leer un valor del usuario y después utilizar este valor. Es decir, pasar un valor de una acción a la otra. Para esto podemos utilizar el operador  getLine >>= putStr Es decir, lee la entrada del usuario, pasa este valor y aplica a él la función putStr.
Con el valor que hemos pasado podemos realizar más acciones. Solo tenemos que darnos cuenta de que la notación anterior es solamente la expresión
 getLine >>= \s -> putStr s convertida en el estilo pointfree. Podemos entonces imprimir el valor dos veces: getLine >>= ( \s -> putStrLn s >> putStrLn s ) Es decir, lee la entrada, pasa su valor a una función que lo imprime dos veces.. 
La acción  return (show (3 + 5)) >>= putStr  |