import Control.Arrow import Data.List import Data.Ord import Data.Ratio -- Faulhaber's triangle, n-th row, first coefficient. bernoulli :: Integer -> Rational bernoulli n = (-1)^n * head (foldl (\rs i -> let xs = zipWith ((*) . (i %)) [2 ..] rs in 1 - sum xs : xs) [] [0..n])