-- n m f(n,m ) sum_ :: Int -> Int -> (Int -> Int -> Int) -> Int sum_ k j f | j <= k = f k j + sum_ k (j+1) f | otherwise = 0 -- from http://stackoverflow.com/questions/28896626/tail-recursive-binomial-coefficient-function-in-haskell binom :: Int -> Int -> Int binom n 0 = 1 binom 0 k = 0 binom n k = binom (n-1) (k-1) * n `div` k fak :: Int -> Int fak n | n > 1 = n* fak ( n-1) | otherwise = 1 stirling2 :: Int -> Int -> Int stirling2 n k = (sum_ k 0 (\ k j -> (pot (-1) (k-j)) * (binom k j) * (pot j n) )) `div` (fak k) pot :: Int -> Int -> Int pot base exp | exp >= 1 = base * pot base (exp-1) | otherwise = 1