cao-0.1: src/Language/CAO/Semantics/Integer.hs
{- |
Module : $Header$
Description : Integer operations semantics.
Copyright : (c) SMART Team / HASLab
License : GPL
Maintainer : Paulo Silva <paufil@di.uminho.pt>
Stability : experimental
Portability : non-portable
Integer operations semantics.
-}
module Language.CAO.Semantics.Integer
( integerPlus
, integerMinus
, integerTimes
, integerPower
, integerDiv
, integerMod
, integerEqual
, integerNotEqual
, integerLessThan
, integerEqualsLessThan
, integerGreaterThan
, integerEqualsGreaterThan
, integerSymmetric
, integerToBits
) where
integerPlus, integerMinus, integerTimes, integerPower, integerDiv, integerMod ::
Integer -> Integer -> Integer
integerPlus = (+)
integerMinus = (-)
integerTimes = (*)
integerPower = (^)
integerDiv = div
integerMod = mod
integerEqual,integerNotEqual :: Integer -> Integer -> Bool
integerEqual = (==)
integerNotEqual = (/=)
integerLessThan, integerEqualsLessThan, integerGreaterThan,
integerEqualsGreaterThan :: Integer -> Integer -> Bool
integerLessThan = (<)
integerEqualsLessThan = (<=)
integerGreaterThan = (>)
integerEqualsGreaterThan = (>=)
integerSymmetric :: Integer -> Integer
integerSymmetric = negate
integerToBits :: Integer -> [Bool]
integerToBits 0 = repeat False
integerToBits i | i < 0 = map not $ integerToBits (-i - 1)
| otherwise = (i `mod` 2 /= 0) : integerToBits (i `div` 2)