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
data Direction = North | East | South | Westda al tipo cuatro valores;deriving (Show, Eq)da ambas instancias.bearingtiene una ecuación por constructor, lo que vuelve exhaustiva la coincidencia sin un caso atrapatodo.isOnshorecompara valores con(==), disponible solo porque se derivóEq, ymainimprime los dos resultados.
Palabras clave y builtins usados aquí
BoolDirectionEastEqIOIntNorthShowSouthWestdataderivingdo
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.
Paso 1 de 3 en Tipos y registros; paso 16 de 27 en Fundamentos del lenguaje.