grisette-0.4.1.0: Symbolic evaluation as a library
Copyright(c) Sirui Lu 2021-2023
LicenseBSD-3-Clause (see the LICENSE file)
Maintainersiruilu@cs.washington.edu
StabilityExperimental
PortabilityGHC only
Safe HaskellTrustworthy
LanguageHaskell2010

Grisette.Core.Data.Class.SafeLinearArith

Description

 
Synopsis

Documentation

data ArithException #

Arithmetic exceptions.

Instances

Instances details
Exception ArithException

Since: base-4.0.0.0

Instance details

Defined in GHC.Exception.Type

Show ArithException

Since: base-4.0.0.0

Instance details

Defined in GHC.Exception.Type

Eq ArithException

Since: base-3.0

Instance details

Defined in GHC.Exception.Type

Ord ArithException

Since: base-3.0

Instance details

Defined in GHC.Exception.Type

Mergeable ArithException Source # 
Instance details

Defined in Grisette.Core.Data.Class.Mergeable

TransformError ArithException AssertionError Source # 
Instance details

Defined in Grisette.Core.Data.Class.Error

SafeDivision ArithException Int16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Int32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Int64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Int8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Word16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Word32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Word64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Word8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException SymInteger Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf SymInteger Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf SymInteger Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf (SymInteger, SymInteger) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf SymInteger Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf SymInteger Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => SymInteger -> SymInteger -> uf (SymInteger, SymInteger) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf SymInteger Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf SymInteger Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf (SymInteger, SymInteger) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf SymInteger Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf SymInteger Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymInteger -> SymInteger -> uf (SymInteger, SymInteger) Source #

SafeDivision ArithException Integer Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeDivision ArithException Int Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf (Int, Int) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf (Int, Int) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf (Int, Int) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf (Int, Int) Source #

SafeDivision ArithException Word Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

SafeLinearArith ArithException Int16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException SymInteger Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Integer Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => Int -> uf Int Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> uf Int Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

SafeLinearArith ArithException Word Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeSymRotate ArithException Int16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Int32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Int64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Int8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Word16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Word32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Word64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Word8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Int Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymRotate ArithException Word Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

SafeSymShift ArithException Int16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Int32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Int64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Int8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Word16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Word32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Word64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Word8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Int Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeSymShift ArithException Word Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

(KnownNat n, 1 <= n) => SafeDivision ArithException (IntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n, IntN n) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n, IntN n) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n, IntN n) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n, IntN n) Source #

(KnownNat n, 1 <= n) => SafeDivision ArithException (WordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n, WordN n) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n, WordN n) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n, WordN n) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n, WordN n) Source #

(KnownNat n, 1 <= n) => SafeDivision ArithException (SymIntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n, SymIntN n) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n, SymIntN n) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n, SymIntN n) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n, SymIntN n) Source #

(KnownNat n, 1 <= n) => SafeDivision ArithException (SymWordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeMod :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeDivMod :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n, SymWordN n) Source #

safeQuot :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeRem :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeQuotRem :: (MonadError ArithException uf, MonadUnion uf) => SymWordN n -> SymWordN n -> uf (SymWordN n, SymWordN n) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n, SymWordN n) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n) Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymWordN n -> SymWordN n -> uf (SymWordN n, SymWordN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (IntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> uf (IntN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> uf (IntN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (WordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> uf (WordN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> uf (WordN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (SymIntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> uf (SymIntN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> uf (SymIntN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (SymWordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

(KnownNat n, 1 <= n) => SafeSymRotate ArithException (IntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

Methods

safeSymRotateL :: (MonadError ArithException m, UnionLike m) => IntN n -> IntN n -> m (IntN n) Source #

safeSymRotateR :: (MonadError ArithException m, UnionLike m) => IntN n -> IntN n -> m (IntN n) Source #

safeSymRotateL' :: (MonadError e' m, UnionLike m) => (ArithException -> e') -> IntN n -> IntN n -> m (IntN n) Source #

safeSymRotateR' :: (MonadError e' m, UnionLike m) => (ArithException -> e') -> IntN n -> IntN n -> m (IntN n) Source #

(KnownNat n, 1 <= n) => SafeSymRotate ArithException (WordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

(KnownNat n, 1 <= n) => SafeSymRotate ArithException (SymIntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

(KnownNat n, 1 <= n) => SafeSymRotate ArithException (SymWordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymRotate

(KnownNat n, 1 <= n) => SafeSymShift ArithException (IntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

(KnownNat n, 1 <= n) => SafeSymShift ArithException (WordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

(KnownNat n, 1 <= n) => SafeSymShift ArithException (SymIntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

(KnownNat n, 1 <= n) => SafeSymShift ArithException (SymWordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeSymShift

SafeDivision (Either BitwidthMismatch ArithException) SomeIntN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeMod :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeDivMod :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf (SomeIntN, SomeIntN) Source #

safeQuot :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeRem :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeQuotRem :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeIntN -> SomeIntN -> uf (SomeIntN, SomeIntN) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf (SomeIntN, SomeIntN) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf SomeIntN Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeIntN -> SomeIntN -> uf (SomeIntN, SomeIntN) Source #

SafeDivision (Either BitwidthMismatch ArithException) SomeWordN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeDivision

Methods

safeDiv :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeMod :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeDivMod :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf (SomeWordN, SomeWordN) Source #

safeQuot :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeRem :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeQuotRem :: (MonadError (Either BitwidthMismatch ArithException) uf, MonadUnion uf) => SomeWordN -> SomeWordN -> uf (SomeWordN, SomeWordN) Source #

safeDiv' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeDivMod' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf (SomeWordN, SomeWordN) Source #

safeQuot' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf SomeWordN Source #

safeQuotRem' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (Either BitwidthMismatch ArithException -> e') -> SomeWordN -> SomeWordN -> uf (SomeWordN, SomeWordN) Source #

SafeLinearArith (Either BitwidthMismatch ArithException) SomeIntN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith (Either BitwidthMismatch ArithException) SomeWordN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

class (SOrd a, Num a, Mergeable a, Mergeable e) => SafeLinearArith e a | a -> e where Source #

Safe division with monadic error handling in multi-path execution. These procedures throw an exception when overflow or underflow happens. The result should be able to handle errors with MonadError.

Methods

safeAdd :: (MonadError e uf, MonadUnion uf) => a -> a -> uf a Source #

Safe + with monadic error handling in multi-path execution. Overflows or underflows are treated as errors.

>>> safeAdd (ssym "a") (ssym "b") :: ExceptT ArithException UnionM SymInteger
ExceptT {Right (+ a b)}
>>> safeAdd (ssym "a") (ssym "b") :: ExceptT ArithException UnionM (SymIntN 4)
ExceptT {If (ite (< 0x0 a) (&& (< 0x0 b) (< (+ a b) 0x0)) (&& (< a 0x0) (&& (< b 0x0) (<= 0x0 (+ a b))))) (If (< 0x0 a) (Left arithmetic overflow) (Left arithmetic underflow)) (Right (+ a b))}

safeNeg :: (MonadError e uf, MonadUnion uf) => a -> uf a Source #

Safe negate with monadic error handling in multi-path execution. Overflows or underflows are treated as errors.

>>> safeNeg (ssym "a") :: ExceptT ArithException UnionM SymInteger
ExceptT {Right (- a)}
>>> safeNeg (ssym "a") :: ExceptT ArithException UnionM (SymIntN 4)
ExceptT {If (= a 0x8) (Left arithmetic overflow) (Right (- a))}

safeMinus :: (MonadError e uf, MonadUnion uf) => a -> a -> uf a Source #

Safe - with monadic error handling in multi-path execution. Overflows or underflows are treated as errors.

>>> safeMinus (ssym "a") (ssym "b") :: ExceptT ArithException UnionM SymInteger
ExceptT {Right (+ a (- b))}
>>> safeMinus (ssym "a") (ssym "b") :: ExceptT ArithException UnionM (SymIntN 4)
ExceptT {If (ite (<= 0x0 a) (&& (< b 0x0) (< (+ a (- b)) 0x0)) (&& (< a 0x0) (&& (< 0x0 b) (< 0x0 (+ a (- b)))))) (If (<= 0x0 a) (Left arithmetic overflow) (Left arithmetic underflow)) (Right (+ a (- b)))}

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (e -> e') -> a -> a -> uf a Source #

Safe + with monadic error handling in multi-path execution. Overflows or underflows are treated as errors. The error is transformed.

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (e -> e') -> a -> uf a Source #

Safe negate with monadic error handling in multi-path execution. Overflows or underflows are treated as errors. The error is transformed.

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (e -> e') -> a -> a -> uf a Source #

Safe - with monadic error handling in multi-path execution. Overflows or underflows are treated as errors. The error is transformed.

Instances

Instances details
SafeLinearArith ArithException Int16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word16 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word32 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word64 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Word8 Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException SymInteger Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Integer Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith ArithException Int Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => Int -> uf Int Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => Int -> Int -> uf Int Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> uf Int Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> Int -> Int -> uf Int Source #

SafeLinearArith ArithException Word Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (IntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> uf (IntN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => IntN n -> IntN n -> uf (IntN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> uf (IntN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> IntN n -> IntN n -> uf (IntN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (WordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> uf (WordN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => WordN n -> WordN n -> uf (WordN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> uf (WordN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> WordN n -> WordN n -> uf (WordN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (SymIntN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

Methods

safeAdd :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeNeg :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> uf (SymIntN n) Source #

safeMinus :: (MonadError ArithException uf, MonadUnion uf) => SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeAdd' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

safeNeg' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> uf (SymIntN n) Source #

safeMinus' :: (MonadError e' uf, MonadUnion uf, Mergeable e') => (ArithException -> e') -> SymIntN n -> SymIntN n -> uf (SymIntN n) Source #

(KnownNat n, 1 <= n) => SafeLinearArith ArithException (SymWordN n) Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith (Either BitwidthMismatch ArithException) SomeIntN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith

SafeLinearArith (Either BitwidthMismatch ArithException) SomeWordN Source # 
Instance details

Defined in Grisette.Core.Data.Class.SafeLinearArith