programming-languages - examples - programming languages used in most popular websites
¿Desventaja de productos tipo no levantados? (3)
Puede producir una diferencia semántica si lo desea en relación con las clases de tipos.
(a, b, c)
y (a, (b, c))
pueden crear instancias de clases de manera diferente. Solo piensa en
show (1, 2, 3)
y
show (1, (2, 3))
Me parece contradictorio tener ambos produciendo el mismo resultado.
En Haskell, los productos de tipo elevado significan que hay una diferencia semántica entre (a, b, c) y (a, (b, c)).
Si todas las combinaciones de patrones de todos los productos fueran siempre irrefutables, entonces no habría diferencia, y (a, b, c) podría ser azúcar sintáctica para (a, (b, c)).
¿Por qué Haskell eligió levantar productos tipo?
Una de las razones es que implementar seq
para un producto no actualizado requiere un cálculo paralelo / intercalado, ya que seq (a, b) True
se supone que es True
si y solo si al menos uno de a
y b
no es inferior. Puede que no encuentres esta razón terriblemente convincente, dependiendo de cómo te sientas acerca de seq
, pero, por supuesto, seq
polimórfica es, por definición, parte de Haskell ...
¿Por qué Haskell eligió levantar productos tipo?
Puede justificar esta elección de diseño sin apelar a la pereza o los patrones refutables. La misma elección de diseño se realiza con ML por razones de soporte de polimorfismo. Considerar
fst (x, y) = x
snd (x, y) = y
Ahora bien, si (a, (b, c))
es azúcar sintáctica para (a, b, c)
, es bastante difícil ver cómo especializar fst
y snd
para tomar este tipo como argumento. Pero
fst :: (a, (b, c)) -> a
snd :: (a, (b, c)) -> (b, c)
son perfectamente razonables. Debido a que las funciones polimórficas como fst
y snd
son increíblemente útiles, tanto Haskell como ML le dan al programador la capacidad de distinguir (a, (b, c))
y ((a, b), c)
de (a, b, c)
.
(Para las personas que se preocupan por los costos, la estructura tipográfica también es una guía razonable para el tamaño del tipo y el número de indirecciones (cargas) necesarias para obtener sus elementos. Algunos programadores necesitan o quieren saber sobre tales cosas y tener algunas pequeño grado de control sobre ellos.)