import Data.Ratio import Data.List foo l = zipWith (*) (enumFrom 1) $ zipWith (-) (tail l) l bernoulli_old n = head $ iterate foo ((1 %) `map` enumFrom 1) !! fromIntegral n bernoulli k = head $ until (null . tail) foo $ (1 %) `map` enumFromTo 1 (k+1)