On Wed, Dec 31, 2003 at 02:38:06PM +0000, Graham Klyne wrote: > getOrCachePositionValue pos = > do { mcache <- gets (findPos pos) -- Query cache for position > ; case mcache of > Just cached -> return (cachedVal cached) -- Return cached value > Nothing -> -- Not in cache: > do { let val = calculatePosVal pos -- Calculate new value > ; modify (addToCache pos val) -- Cache new value > ; return val -- Return new value > } > } > > (This code of off-the-cuff, and may contain errors) > > My point is that the function 'calculatePosVal' used here to evaluate a > position not in the cache simply returns the calculated value, not a > monad. This function is wrapped in "high level" code that queries and/or > updates the cache which is kept in a state monad. Thus, the return type of > 'getOrCachePositionValue' would be a monad of the appropriate type.
But I want calculatePosVal to use the cache too :( - Joe _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe