import Data.Char import Data.List import Data.Ratio bernoulli :: Integer -> Rational bernoulli 0 = 1 bernoulli n = sum [product [n-k+1..n] `div` product [1..k] % (k-n-1) * bernoulli k | k <- enumFromTo 0 $ n-1]