Imprimir con mapM_ en Haskell
mapM_ corre una acción por elemento y descarta los resultados; forM_ es igual con los argumentos al revés.
import Control.Monad (forM_)
stations :: [(String, Int)]
stations = [("north", 4), ("central", 11), ("south", 7)]
-- Pad on the right so the columns line up.
pad :: Int -> String -> String
pad n s = s ++ replicate (n - length s) ' '
main :: IO ()
main = do
-- mapM_ runs an action per element and discards the results.
mapM_ print stations
mapM_ (putStrLn . fst) stations
-- forM_ is mapM_ with the arguments flipped, so the body comes last.
forM_ stations $ \(name, bikes) ->
putStrLn (pad 9 name ++ show bikes ++ " bikes free")
Cómo funciona
mapM_ print stationsimprime cada par, mientrasmapM_ (putStrLn . fst) stationsimprime solo los nombres.padalinea las columnas agregandoreplicate (n - length s) ' 'al final.forM_ stationsrecibe la lista primero, lo que deja el cuerpo de la lambda al final del bloque.
Palabras clave y builtins usados aquí
IOIntStringdoimport
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 532
- Tokens
- 105
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 90 segundos.
Paso 3 de 3 en Fundamentos de IO; paso 24 de 27 en Fundamentos del lenguaje.