typestar

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

  1. mapM_ print stations imprime cada par, mientras mapM_ (putStrLn . fst) stations imprime solo los nombres.
  2. pad alinea las columnas agregando replicate (n - length s) ' ' al final.
  3. forM_ stations recibe la lista primero, lo que deja el cuerpo de la lambda al final del bloque.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Fundamentos de IO; paso 24 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →