typestar

Secuenciar IO con do en Haskell

Un bloque do corre acciones de IO de arriba abajo y llama a una función pura a mitad de camino.

-- A pure helper: no IO in the type, so anything may call it.
initials :: String -> String
initials full = concatMap (take 1) (words full)

-- do threads IO actions together, running them top to bottom.
main :: IO ()
main = do
  putStrLn "badge printer"
  let name = "grace brewster hopper"
  putStrLn (initials name)
  -- print is putStrLn after show, so it takes any Show value.
  print (length (words name))
  putStrLn "badge ready"

Cómo funciona

  1. initials full = concatMap (take 1) (words full) es pura, así que no aparece IO en su tipo.
  2. main = do secuencia las llamadas a putStrLn, y let name nombra un valor a mitad del bloque.
  3. print (length (words name)) maneja un valor que no es String, porque print es putStrLn después de show.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
13
Caracteres a escribir
423
Tokens
54
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 43 segundos.

Escribe este fragmento

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

← Anterior Siguiente →