Haskell のデフォルトの整数コンストラクターをオーバーライドして、文字列を生成するようにしたいと考えています (主に好奇心のためですが、一時的に LaTeX の \frac{}{} の不便さを解消するための優れた入力代替手段を作成するためです)。
特別なパーサーではなく、言語自体を使用できるようにしたかったのですが、おそらくうまくいかないでしょう...
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, String) ではなく (A, A) に対してのみ機能することなどです。単純にパターン マッチ "(A a)" を省略し、代わりに "a" と書くと、 show() 関数は "A" を先頭に追加するため、"3" は "3" ではなく "A 3" になります。
A の Show をオーバーライドしたいのですが、かなり頭が痛いようです...