typestar

Tipos suma en Haskell

Un tipo suma enumera todos los valores que el tipo admite, y deriving escribe el código de impresión y comparación.

-- a sum type lists its alternatives; deriving asks GHC to write the
-- Show and Eq instances so these values can print and compare
data Direction = North | East | South | West
  deriving (Show, Eq)

-- one equation per constructor, which makes the match exhaustive
bearing :: Direction -> Int
bearing North = 0
bearing East = 90
bearing South = 180
bearing West = 270

-- (==) works on Direction only because Eq was derived above
isOnshore :: Direction -> Bool
isOnshore d = d == East || d == South

main :: IO ()
main = do
  print (map bearing [North, East, South, West])
  print (South, isOnshore South)

Cómo funciona

  1. data Direction = North | East | South | West da al tipo cuatro valores; deriving (Show, Eq) da ambas instancias.
  2. bearing tiene una ecuación por constructor, lo que vuelve exhaustiva la coincidencia sin un caso atrapatodo.
  3. isOnshore compara valores con (==), disponible solo porque se derivó Eq, y main imprime los dos resultados.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
600
Tokens
84
Ritmo de tres estrellas
75 tpm

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

Escribe este fragmento

Paso 1 de 3 en Tipos y registros; paso 16 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →