Я хочу переопределить целочисленные конструкторы по умолчанию в 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, но, похоже, это головная боль ...