{- | Module : Cookbook.Recipes.Math Copyright : (c) 2014 by Nate Pisarski License : BSD3 Maintainer : nathanpisarski@gmail.com Stability : Stable Portability : Portable (Standalone - ghc) Library for working with numbers more easily. It includes somewhat lazy functions for when a lambda will clutter code up too much, as well as more involved mathematical formulae. -} module Cookbook.Recipes.Math where -- | Increase value by one. inc :: (Enum a) => a -> a inc = succ -- | Decrease value by one, dec :: (Enum a) => a -> a dec = pred -- | Multiply a number by itself. sqr :: (Num a) => a -> a sqr x = x*x -- | Find the average of a group of Fractionals. avg :: Fractional a => [a] -> a avg x = sum x / realToFrac (length x) -- | Find the standard deviation of a list of data. stdev :: (Fractional a, Floating a) => [a] -> a stdev x = sqrt $ diffs / realToFrac (length x) where diffs = sum [sqr $ a - avg x| a <- x] -- | Factorial, from 1 to point. fact :: (Num a, Enum a) => a -> a fact x = foldl (*) x [1..dec x]