packages feed

decimal-arithmetic-0.3.0.0: src/Numeric/Decimal/Arithmetic.hs-boot

-- -*- Haskell -*-

{-# LANGUAGE RoleAnnotations #-}

module Numeric.Decimal.Arithmetic
       ( Arith
       , newContext
       , evalArith
       , getPrecision
       , Signal(..)
       , raiseSignal
       , exceptionResult
       ) where

import Control.Monad.Except (ExceptT)
import Control.Monad.State (State)

import {-# SOURCE #-} Numeric.Decimal.Number
import                Numeric.Decimal.Precision (Precision)

data Context p r
newContext :: Context p r

newtype Arith p r a = Arith (ExceptT (Exception p r) (State (Context p r)) a)
instance Functor (Arith p r)
instance Applicative (Arith p r)
instance Monad (Arith p r)
evalArith :: Arith p r a -> Context p r -> Either (Exception p r) a
getPrecision :: Precision p => Arith p r (Maybe Int)

data Signal
  = Clamped
  | DivisionByZero
  | Inexact
  | InvalidOperation
  | Overflow
  | Rounded
  | Subnormal
  | Underflow
raiseSignal :: Signal -> Decimal p r -> Arith p r (Decimal p r)

type role Exception phantom phantom
data Exception p r
exceptionResult :: Exception p r -> Decimal p r