module Satchmo.Binary.Numeric where

-- import qualified Satchmo.Binary.Op.Flexible as F
import qualified Satchmo.Binary.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 => Integer -> m Number
F.constant  
    
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 a. HasCallStack => [Char] -> a
error [Char]
"Satchmo.Binary does not implement minus"
    times :: forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
times = forall (m :: * -> *). MonadSAT m => Number -> Number -> m Number
F.times