import Data.List import Data.Ratio chooose :: Integer -> Integer -> Integer chooose' n 0 = 1 chooose' 0 k = 0 chooose' n k = if k * 2 > n then chooose n (n-k) else chooose n k chooose n 0 = 1 chooose 0 k = 0 chooose n k = chooose (pred n) (pred k) * n `div` k bernoulli :: Integer -> Rational bernoulli n = sum [sum [s v * chooose' k v * v^n | v <- [0..k]] % (succ k)| k <- [0..n]] where s n = if odd n then -1 else 1