Así que estoy escribiendo un programa que devuelve un procedimiento para un problema aritmético dado, así que quise ejemplificar un par de funciones para mostrar para que pueda imprimir la misma expresión que evalúo cuando prueba. El problema es que el código dado coincide (-) con la primera línea cuando debería caer al segundo.Coincidencia de patrones extraños con funciones instancias Mostrar
{-# OPTIONS_GHC -XFlexibleInstances #-}
instance Show (t -> t-> t) where
show (+) = "plus"
show (-) = "minus"
main = print [(+),(-)]
vuelve
[plus,plus]
solo estoy cometiendo un mortal pecado funciones de impresión en el primer lugar o hay alguna manera de que pueda conseguirlo para que coincida correctamente?
editar: Me doy cuenta que estoy recibiendo la siguiente advertencia:
Warning: Pattern match(es) are overlapped
In the definition of `show': show - = ...
Todavía no sé por qué se superpone, o cómo detenerlo.
Eso es fantástico, gracias. (Y mucho más elegante que la solución que proporcioné a continuación.) –
@Sean D: También representa una buena ilustración de dónde fallaría su megaprocesador: considere lo que sucedería si se utilizara con un operador en valores 'Expression Integer' . 'Suma 6 2' no es igual a' Literal 8', a pesar de que mi código es una instancia perfectamente razonable de 'Num'. –