typestar

Registros en Haskell

La sintaxis de registros nombra cada campo, define un accesor por campo y copia un valor con cambios.

-- a record names each field and defines an accessor function for it
data Roast = Roast
  { roastName :: String, originCity :: String, bagsOnHand :: Int }
  deriving (Show)

-- build one by naming fields, in whatever order suits you
house :: Roast
house = Roast { roastName = "House", originCity = "Antigua",
                bagsOnHand = 9 }

-- an accessor is an ordinary function from the record to one field
label :: Roast -> String
label r = roastName r ++ " (" ++ originCity r ++ ")"

-- update syntax copies the record, replacing only the listed field
sell :: Int -> Roast -> Roast
sell n r = r { bagsOnHand = bagsOnHand r - n }

main :: IO ()
main = putStrLn (label house) >> print (sell 4 house)

Cómo funciona

  1. data Roast = Roast declara tres campos, así que bagsOnHand es una función de un Roast a ese campo.
  2. house se construye nombrando campos, y por eso su orden dentro de las llaves es libre.
  3. sell n r = r { bagsOnHand = bagsOnHand r - n } devuelve una copia con un campo reemplazado y deja intacto a house.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
683
Tokens
107
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 92 segundos.

Escribe este fragmento

Paso 2 de 3 en Tipos y registros; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →