From 5dbc7df4ae2c0a5d86cd462eb767265d4a718a24 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Wed, 23 Dec 2009 23:59:43 -0500 Subject: [PATCH] floating: Add Roundable instance for Integral a => Ratio a. --- Data/Floating.hs | 1 + Data/Floating/Instances.hs | 13 +++++++++++++ altfloat.cabal | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 Data/Floating/Instances.hs diff --git a/Data/Floating.hs b/Data/Floating.hs index c995439..9a918ce 100644 --- a/Data/Floating.hs +++ b/Data/Floating.hs @@ -16,6 +16,7 @@ module Data.Floating ( import Prelude hiding (RealFloat(..), Double, Float) import Data.Floating.Classes +import Data.Floating.Instances import Data.Floating.Double import Data.Floating.Types diff --git a/Data/Floating/Instances.hs b/Data/Floating/Instances.hs new file mode 100644 index 0000000..2c0cce8 --- /dev/null +++ b/Data/Floating/Instances.hs @@ -0,0 +1,13 @@ +module Data.Floating.Instances where + +import qualified Prelude +import Prelude hiding (round, floor, ceiling, truncate) +import Data.Floating.Classes +import Data.Ratio + +instance Integral a => Roundable (Ratio a) where + toIntegral = Just . fst . properFraction + round x + | abs frac >= 1%2 = int%1 + signum frac + | otherwise = int%1 + where (int, frac) = properFraction x diff --git a/altfloat.cabal b/altfloat.cabal index 81a3d38..3a7a4d4 100644 --- a/altfloat.cabal +++ b/altfloat.cabal @@ -34,4 +34,4 @@ Library Data.Floating, Data.Poset Other-Modules: - Data.Poset.Internal, Data.Poset.Instances + Data.Floating.Instances, Data.Poset.Internal, Data.Poset.Instances -- 2.11.4.GIT