----------------------------------------------------------------------------- -- -- Module : Math.Fractions -- Copyright : (c) 2014-16 Brian W Bush -- License : MIT -- -- Maintainer : Brian W Bush -- Stability : Experimental -- Portability : Portable -- -- | Some special operations with fractions. -- ----------------------------------------------------------------------------- {-# LANGUAGE Safe #-} module Math.Fractions {-# DEPRECATED "This module will be removed in a future release." #-} ( -- * Functions fractions , fractionsMaybe ) where import Control.Arrow (second) import Data.List.Util (regroup) import Data.Maybe (mapMaybe) -- | Apply a function to a list to extract keys with values that sum to unity. fractions :: (Ord b, Fractional c) => (a -> (b, c)) -> [a] -> [(b, c)] fractions extractor x = let x' = map (second sum) $ regroup $ map extractor x t = sum $ map snd x' in map (second (/ t)) x' -- | Apply a function to a list to extract keys with values that sum to unity. fractionsMaybe :: (Ord b, Fractional c) => (a -> Maybe (b, c)) -> [a] -> [(b, c)] fractionsMaybe = (fractions id .) . mapMaybe