【发布时间】:2010-04-18 01:46:44
【问题描述】:
我想覆盖 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, A) 而不是 (A, String) 等。如果简单地省略模式匹配“(A a)”并写入“a”相反,show() 函数会在“A”前面加上“3”,而不仅仅是“3”。
我想覆盖A的Show,但是好像挺头疼的……
【问题讨论】: