This package has some functions to turn recursive functions into dynamic programming recursive functions, for better performance:
http://hackage.haskell.org/packages/arc
Per types and documentation, I believe
foo :: [Int] -> Int -> Int
should be memoised per
memo2 (list integral) integral foo
(disclaimer: I haven't used data-memocombinators).