Transparent memoisation in Haskell with MemoTries