module Sound.OSC.Type.JSON.Math where
import Data.Int
import Data.Ratio
import Data.Word
in_range :: (Integral r,Integral n) => r -> r -> n -> Bool
in_range l r n =
let f :: Integral i => i -> Integer
f = fromIntegral
in f n >= f l && f n <= f r
in_int8 :: Integral a => a -> Bool
in_int8 = in_range (minBound::Int8) (maxBound::Int8)
in_int16 :: Integral a => a -> Bool
in_int16 = in_range (minBound::Int16) (maxBound::Int16)
in_int32 :: Integral a => a -> Bool
in_int32 = in_range (minBound::Int32) (maxBound::Int32)
in_int64 :: Integral a => a -> Bool
in_int64 = in_range (minBound::Int64) (maxBound::Int64)
ratio_is_integral :: Integral n => Ratio n -> Bool
ratio_is_integral = (== 1) . denominator
ratio_is_bounded_integral :: Integral n => n -> Ratio n -> Bool
ratio_is_bounded_integral m n =
ratio_is_integral n &&
numerator n <= m
ratio_is_int :: Integral n => Ratio n -> Bool
ratio_is_int = ratio_is_bounded_integral (fromIntegral (maxBound::Int))
ratio_is_word8 :: Integral n => Ratio n -> Bool
ratio_is_word8 = ratio_is_bounded_integral (fromIntegral (maxBound::Word8))