devforms-0.3.0.0: src/BoundedNumber.hs
module BoundedNumber (BoundedNumber, parseWithBounds, unwrapBounded, NumberBoundError (..))
where
data BoundedNumber a = BoundedNumber a
data NumberBoundError = NumberOutOfBounds deriving (Show)
parseWithBounds :: (Real a) => Maybe Double -> Maybe Double -> a -> Either NumberBoundError (BoundedNumber a)
parseWithBounds lb ub n =
let lowerBoundSatisfied = maybe True (\l -> toRational l <= (toRational n)) lb
upperBoundSatisfied = maybe True (\u -> toRational u >= (toRational n)) ub
in if lowerBoundSatisfied && upperBoundSatisfied then pure $ BoundedNumber n else Left NumberOutOfBounds
unwrapBounded :: BoundedNumber a -> a
unwrapBounded (BoundedNumber n) = n