tengo este trozo de código:SML lista igualdad oddness
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
Con la firma de tipo
(''a * ''a -> ''a) * ''a list -> ''a
parece bastante sencillo, se necesita una función que funciona sobre tipos de igualdad y una lista del tipo de igualdad como argumentos, debido a la comparación xs = []
. Sin embargo, por alguna razón funciona en entradas como (op +, [2.3, 2.7, 4.0])
, cuando en SML/NJ reales no son un tipo de igualdad. ¿Alguien puede ayudarme a arrojar algo de luz sobre por qué ocurre esta magia?
+1, también me pregunto por qué funciona esto. Es como si SML/NJ traduce el bloque de condición a "nulo [2.3, 2.7, 4.0]" o similar. –