
He Stephen Thanks for the tip. I will test the performance of Data.Sequence against Immutable arrays. I also have another question about deriving monads. I have modified Data.List.Zipper, so it supports 2 extra directions (up and down): data Zipper a = Zip [a] [a] [a] [a] Now I made a functor out of it: ** instance Functor Zipper where -- fmap :: (a -> b) -> f a -> f b f `fmap` (Zip ls rs ds us) = Zip (f `fmap` ls) (f `fmap` rs) (f `fmap` ds) (f `fmap` us) This works. Now I try to make an monad out of it: instance Monad Zipper where return a = Zip [a] [] [] [] (Zip ls rs ds us) >>= f = Zip (ls >>= f) (rs >>= f) (ds >>= f) (us >>= f) This doesn't work like expected, but when using the newtype derive mechanism it works. Thanks for all your help so far. Best Wishes, Edgar