websites used programming popular most languages examples programming-languages haskell types functional-programming lazy-evaluation

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.)