Как я могу написать дополнение двух элементов в строковом представлении? - PullRequest
0 голосов
/ 29 ноября 2008

Например, я хочу добавить два выражения e1 и e2

toString (Plus e1 e)= ??

Я предполагаю, что это будет что-то вроде

toString (Plus e1 e)= ((toString e1) ++ "+" ++ (toString e2))

1 Ответ

1 голос
/ 03 апреля 2009

Я сделал несколько предположений о том, как определяется плюс. С этим кодом вы можете просто набрать expr в приглашении ghci, и ghci выведет выражение 100-30 + 100 + 30.

module Main where

data Expr =
    Plus Expr Expr
  | Minus Expr Expr
  | Value Int

-- This works but is not as Haskell-y as using Show
toString (Plus e1 e2) = toString e1 ++ "+" ++ toString e2
toString (Minus e1 e2)  = toString e1 ++ "-" ++ toString e2
toString (Value n) = show n

instance Show Expr where
  show (Plus e1 e2) = show e1 ++ "+" ++ show e2
  show (Minus e1 e2)  = show e1 ++ "-" ++ show e2
  show (Value n) = show n

expr = (Plus
         (Minus (Value 100) (Value 30))
         (Plus (Value 100) (Value 30)))
...