Copyright | (c) Galois Inc. 2020 |
---|---|
License | BSD-3 |
Maintainer | Ben Selfridge <benselfridge@galois.com> |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Data.BitVector.Sized.Overflow
Description
This module provides alternative definitions of certain bitvector functions that might produce signed or unsigned overflow. Instead of producing a pure value, these versions produce the same value along with overflow flags. We only provide definitions for operators that might actually overflow.
Synopsis
- data Overflow a = Overflow UnsignedOverflow SignedOverflow a
- data UnsignedOverflow
- data SignedOverflow
- ofUnsigned :: Overflow a -> Bool
- ofSigned :: Overflow a -> Bool
- ofResult :: Overflow a -> a
- shlOf :: 1 <= w => NatRepr w -> BV w -> Natural -> Overflow (BV w)
- addOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- subOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- mulOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- squotOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- sremOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- sdivOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
- smodOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w)
Documentation
A value annotated with overflow information.
Constructors
Overflow UnsignedOverflow SignedOverflow a |
Instances
Foldable Overflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods fold :: Monoid m => Overflow m -> m foldMap :: Monoid m => (a -> m) -> Overflow a -> m foldMap' :: Monoid m => (a -> m) -> Overflow a -> m foldr :: (a -> b -> b) -> b -> Overflow a -> b foldr' :: (a -> b -> b) -> b -> Overflow a -> b foldl :: (b -> a -> b) -> b -> Overflow a -> b foldl' :: (b -> a -> b) -> b -> Overflow a -> b foldr1 :: (a -> a -> a) -> Overflow a -> a foldl1 :: (a -> a -> a) -> Overflow a -> a elem :: Eq a => a -> Overflow a -> Bool maximum :: Ord a => Overflow a -> a minimum :: Ord a => Overflow a -> a | |
Traversable Overflow Source # | |
Applicative Overflow Source # | |
Functor Overflow Source # | |
Monad Overflow Source # | Monad for bitvector operations which might produce signed or unsigned overflow. |
Show a => Show (Overflow a) Source # | |
Eq a => Eq (Overflow a) Source # | |
data UnsignedOverflow Source #
Datatype representing the possibility of unsigned overflow.
Constructors
UnsignedOverflow | |
NoUnsignedOverflow |
Instances
Monoid UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods mappend :: UnsignedOverflow -> UnsignedOverflow -> UnsignedOverflow mconcat :: [UnsignedOverflow] -> UnsignedOverflow | |
Semigroup UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (<>) :: UnsignedOverflow -> UnsignedOverflow -> UnsignedOverflow sconcat :: NonEmpty UnsignedOverflow -> UnsignedOverflow stimes :: Integral b => b -> UnsignedOverflow -> UnsignedOverflow | |
Show UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods showsPrec :: Int -> UnsignedOverflow -> ShowS show :: UnsignedOverflow -> String showList :: [UnsignedOverflow] -> ShowS | |
Eq UnsignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (==) :: UnsignedOverflow -> UnsignedOverflow -> Bool (/=) :: UnsignedOverflow -> UnsignedOverflow -> Bool |
data SignedOverflow Source #
Datatype representing the possibility of signed overflow.
Constructors
SignedOverflow | |
NoSignedOverflow |
Instances
Monoid SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods mappend :: SignedOverflow -> SignedOverflow -> SignedOverflow mconcat :: [SignedOverflow] -> SignedOverflow | |
Semigroup SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (<>) :: SignedOverflow -> SignedOverflow -> SignedOverflow sconcat :: NonEmpty SignedOverflow -> SignedOverflow stimes :: Integral b => b -> SignedOverflow -> SignedOverflow | |
Show SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods showsPrec :: Int -> SignedOverflow -> ShowS show :: SignedOverflow -> String showList :: [SignedOverflow] -> ShowS | |
Eq SignedOverflow Source # | |
Defined in Data.BitVector.Sized.Overflow Methods (==) :: SignedOverflow -> SignedOverflow -> Bool (/=) :: SignedOverflow -> SignedOverflow -> Bool |
ofUnsigned :: Overflow a -> Bool Source #
Return True
if a computation caused unsigned overflow.
Overflowing bitwise operators
shlOf :: 1 <= w => NatRepr w -> BV w -> Natural -> Overflow (BV w) Source #
Left shift by positive Natural
.
Overflowing arithmetic operators
squotOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector division (signed). Rounds to zero. Division by zero yields a runtime error.
sremOf :: 1 <= w => NatRepr w -> BV w -> BV w -> Overflow (BV w) Source #
Bitvector remainder after division (signed), when rounded to zero. Division by zero yields a runtime error.