{-# LANGUAGE LambdaCase #-}
{-# OPTIONS_HADDOCK hide #-}
-- |
-- Copyright: © 2018-2020 IOHK
-- License: Apache-2.0
--
-- Provides internal types and functions relating to rounding of fractional
-- numbers.
--
module Internal.Rounding
( RoundingDirection (..)
, round
) where
import Prelude hiding
( round )
-- | Indicates a rounding direction to be used when converting from a
-- fractional value to an integral value.
--
-- See 'round'.
--
data RoundingDirection
= RoundUp
-- ^ Round up to the nearest integral value.
| RoundDown
-- ^ Round down to the nearest integral value.
deriving (Eq, Show)
-- | Use the given rounding direction to round the given fractional value,
-- producing an integral result.
--
round :: (RealFrac a, Integral b) => RoundingDirection -> a -> b
round = \case
RoundUp -> ceiling
RoundDown -> floor