[Haskell-cafe] ZipList monad, anyone?

Patai Gergely patai_gergely at fastmail.fm
Wed Apr 1 06:44:35 EDT 2009


Does ZipList have any useful monad instance? The thought came up while
thinking about higher order dataflows and an ArrowApply interface for
Yampa. As a ZipList can be thought of as a function with a discrete
domain, I figured its monadic form could be analogous to the reader
monad, hence:

instance Monad ZipList where
    return = ZipList . repeat
    ZipList xs >>= f = ZipList $ zipWith ((!!) . getZipList . f) xs
    [0..]

Correct me if I'm wrong, but it seems to me that f always returning an
infinite list is a sufficient condition for the monad laws to hold.
However, this is painfully inefficient. I assume that bringing FRP-like
switching and some clever data structure (which optimises stateless
streams for starters) into the picture can potentially lead to
constant-time access at least in the case of sequential sampling. Is
there any recent work going in this direction?

Gergely

-- 
http://www.fastmail.fm - One of many happy users:
  http://www.fastmail.fm/docs/quotes.html



More information about the Haskell-Cafe mailing list