Как переопределить показ для нового типа?
Я хочу переопределить целочисленные конструкторы по умолчанию в Haskell, чтобы они производили строки (в основном для любопытства, но временно, чтобы сделать хорошую альтернативу ввода для неудобства \ frac {} {} в LaTeX).
Я хотел иметь возможность использовать сам язык вместо специального синтаксического анализатора, но я думаю, что это, вероятно, не сработает ...
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
Проблема с вышеупомянутым состоит в том, что функция + работает только для (A, A) вместо (A, String) и т. Д. Если кто-то просто пропускает совпадение с шаблоном "(A a)" и пишет вместо него "a", то функция show () добавляет «A», поэтому «3» становится «A 3» вместо «3».
Я хочу переопределить Show для A, но это, кажется, довольно головная боль ...