¿Por qué Haskell decidió levantar los productos de tipo?
Puede justificar esta elección de diseño sin recurrir a la pereza o los patrones refutables. La misma elección de diseño se realiza ML por razones de soporte de polimorfismo. Consideremos
fst (x, y) = x
snd (x, y) = y
Ahora bien, si (a, (b, c))
es el azúcar sintáctica para (a, b, c)
, es muy difícil ver cómo se especializan fst
snd
y para tomar este tipo de 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 tan 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 la cantidad de indirecciones (cargas) necesarias para obtener sus elementos. Algunos programadores necesitan o quieren saber sobre tales cosas y tener un pequeño grado de control sobre ellos.)
¿Porque una tupla aplanada es menos útil? – kennytm
¿Por "aplanar" quiere decir sin elevación? Si es así, ¿por qué? No me parece obvio, y la tupla no levantada tiene mejores propiedades algebraicas formales. –
Prefiero que sea azúcar sintáctica para '(a, (b, (c,())))' como HList – yairchu