Clases predefinidas
Tomando como referencia un mail que escribió @egunther la idea es que tengamos varias clases predefinidas como son Eq, Ord y Show, a lo que sumo que me gustaría tener una clase Iterable que tiene una naturaleza un poco distinta.
Eq, Ord y Show
Lo que me imagino es copiar a Haskell para arrancar y ver como va evolucionando. Para esto lo que se me ocurre es que para definir que los valores de un tipo son comparables por ejemplo tenemos una especie de sintaxis del estilo, dada la siguiente declaración de tipo
type persona = tuple
inicial : char,
edad : int,
peso : real
end tuple
instance Eq of persona
fun eq(p, p' : persona) ret b : bool
...
end fun
end instance
donde el nombre de la función (eq
) es super importante porque lo va a utilizar internamente el interprete para resolver la semántica del operador ==
. En Haskell esto es más transparente porque al definir la instancia misma de Eq estamos definiendo la función con nombre ==; creo ir por un camino así complica las cosas porque vamos a estar mezclando funciones con operadores. La idea sería que la semántica del operador == la implementa alguna función en el caso de no ser un tipo builtin. Por supuesto así como el nombre de la función es importante también lo son sus argumentos y tipo; todas cosas prefijadas de ante mano para nuestras clases predefinidas.
En resumen para un tipo T
tener instancia de:
- Eq implica definir una función con prototipo
fun eq(t, t' : T) ret b : bool
. Nos permite usar los operadores==
y!=
. - Ord implica definir una función con prototipo
fun ord(t, t' : T) ret b : bool
(está definición equivale en Haskell a implementar <= en lugar de compare, pero se podría incluir algún tipo Ordering de manera de que el tipo de la variable de retorno sea ese). Nos permite usar los operadores<
,<=
, etc. - Show implica definir una función con prototipo
fun show(t : T) ret b : string
, actualmente no tenemos a string como tipo nativo. Esta última instancia la podemos pensar mejor, quizá no nos interesa tanto.
Iterable
Acá la instancia se pone más interesante.