integer-types-0.0.0.1: library/Integer/Finite.hs
module Integer.Finite where
import Essentials
import Data.Int (Int)
import Data.Word (Word)
import Integer.Integer (Integer)
import Integer.Natural (Natural)
import Integer.Positive (Positive)
import Integer.Signed (Signed)
import Prelude (Integral)
import qualified Data.Maybe as Maybe
import qualified Integer.Integer as Integer
import qualified Integer.Natural as Natural
import qualified Integer.Positive as Positive
import qualified Integer.Signed as Signed
class ConvertWithFinite a where
toWord :: a -> Maybe Word
fromWord :: Word -> Maybe a
toInt :: a -> Maybe Int
fromInt :: Int -> Maybe a
instance ConvertWithFinite Natural where
toWord = Natural.toWord
fromWord = Maybe.Just . Natural.fromWord
toInt = Natural.toInt
fromInt = Natural.fromInt
instance ConvertWithFinite Positive where
toWord = Positive.toWord
fromWord = Positive.fromWord
toInt = Positive.toInt
fromInt = Positive.fromInt
instance ConvertWithFinite Integer where
toWord = Integer.toWord
fromWord = Maybe.Just . Integer.fromWord
toInt = Integer.toInt
fromInt = Maybe.Just . Integer.fromInt
instance ConvertWithFinite Signed where
toWord = Signed.toWord
fromWord = Maybe.Just . Signed.fromWord
toInt = Signed.toInt
fromInt = Maybe.Just . Signed.fromInt
class (Bounded b, Integral b) => Finite b where
toFinite :: ConvertWithFinite a => a -> Maybe b
fromFinite :: ConvertWithFinite a => b -> Maybe a
instance Finite Int where
toFinite = toInt
fromFinite = fromInt
instance Finite Word where
toFinite = toWord
fromFinite = fromWord