module Satchmo.BinaryTwosComplement.Numeric where

import qualified Satchmo.BinaryTwosComplement.Op.Fixed as F
import qualified Satchmo.Numeric as N

instance N.Constant F.Number where
    constant :: forall (m :: * -> *). MonadSAT m => Integer -> m Number
constant = forall (m :: * -> *). MonadSAT m => Int -> Integer -> m Number
F.constantWidth Int
1  
    
instance N.Create F.Number where    
    create :: forall (m :: * -> *). MonadSAT m => Int -> m Number
create = forall (m :: * -> *). MonadSAT m => Int -> m Number
F.number

instance N.Numeric F.Number where
    equal :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Boolean
equal = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Boolean
F.equals
    greater_equal :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Boolean
greater_equal = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Boolean
F.ge
    plus :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
plus = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
F.add
    minus :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
minus = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
F.subtract
    times :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
times = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
F.times