Wie wird eine Show für einen neuen Typ überschrieben?

Ich möchte die standardmäßigen Ganzzahlkonstruktoren in Haskell überschreiben, damit sie Zeichenfolgen erzeugen (hauptsächlich aus Neugier, aber vorübergehend, um eine gute Alternative für die Eingabe von LaTeXs \ frac {} {} Unannehmlichkeiten zu bieten).

Ich wollte in der Lage sein, die Sprache selbst zu verwenden, anstatt einen speziellen Parser zu verwenden, aber ich denke, das wird wahrscheinlich nicht klappen ...

module Main where

import Prelude hiding ((+))

newtype A = A Int deriving (Eq, Show, Num)
default (A)

(+) :: A -> (A -> String)
(A a) + (A b) = (show a) ++ " + " ++ (show b)

main2 = 3+4

main :: IO ()
main = putStrLn main2

Das Problem mit dem oben genannten ist, dass die + -Funktion nur für (A, A) anstelle von (A, String) usw. funktioniert. Wenn man einfach die Musterübereinstimmung "(A a)" weglässt und stattdessen "a" schreibt, dann stellt die show () - Funktion "A" voran, so dass "3" zu "A 3" anstatt nur "3" wird.

Ich möchte Show für A überschreiben, aber es scheint ein ziemlicher Kopfschmerz zu sein ...

Antworten auf die Frage(3)

Ihre Antwort auf die Frage