module Data.Number.ER.PlusMinus where
import Data.Typeable
import Data.Generics.Basics
import Data.Binary
data PlusMinus = Minus | Plus
deriving (Eq, Ord, Typeable, Data)
instance Show PlusMinus where
show Plus = "+"
show Minus = "-"
instance Binary PlusMinus where
put Minus = putWord8 0
put Plus = putWord8 1
get = do
tag_ <- getWord8
case tag_ of
0 -> return Minus
1 -> return Plus
_ -> fail "no parse"
signNeg Plus = Minus
signNeg Minus = Plus
signMult Plus s = s
signMult Minus s = signNeg s
signToNum Plus = 1
signToNum Minus = 1