Thanks, everybody!
Your feedback is a great food for my mind (as Lewis Carroll once wrote :) 
When asking "how to implement cache in Haskell" I was hopping that there exists some solution without using Data.Array, more "functional" approach, if I may say so  ...
I must be wrong, though (need more time to fully comprehend solution that Steven described in this thread ). 

On Thu, Apr 14, 2011 at 3:22 PM, Ryan Ingram <ryani.spam@gmail.com> wrote:
So if we were to emulate your Java solution, we'd do

import Data.Array

cacheSize :: Int
cacheSize = 65536

table :: Array Int Integer
table = listArray (1,cacheSize) (1 : map go [2..cacheSize]) where
    go n
        | even n = 1 + lookup (n `div` 2)
        | otherwise = 1 + lookup (3 * n + 1)

lookup :: Integer -> Integer
lookup n
    | n < cacheSize = table ! (fromInteger n)
    | even n = 1 + lookup (n `div` 2)
    | otherwise = 1 + lookup (3 * n + 1)

The rest of the code is just some simple i/o.

The table is filled up lazily as you request values from it.


--
All the best,
Dmitri O. Kondratiev

"This is what keeps me going: discovery"
dokondr@gmail.com
http://sites.google.com/site/dokondr/welcome