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
data Roast = Roastdeclara tres campos, así quebagsOnHandes una función de unRoasta ese campo.housese construye nombrando campos, y por eso su orden dentro de las llaves es libre.sell n r = r { bagsOnHand = bagsOnHand r - n }devuelve una copia con un campo reemplazado y deja intacto ahouse.
Palabras clave y builtins usados aquí
IOIntRoastShowStringdataderiving
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.
Paso 2 de 3 en Tipos y registros; paso 17 de 27 en Fundamentos del lenguaje.