
may I recommend the following instances as well. I would like to see Seq stay in the library. using 'Seq String' to build up complicated structures can be much much more efficient than otherwise and it is a handy idiom to not have to constantly reimplement. import Data.Monoid import qualified IntSet as IS import qualified IntMap as IM import qualified Set import qualified Map import qualified Seq import Monad instance Monoid IS.IntSet where mempty = IS.empty mappend = IS.union mconcat = IS.unions instance Monoid (IM.IntMap a) where mempty = IM.empty mappend = IM.union mconcat = IM.unions instance Ord a => Monoid (Set.Set a) where mempty = Set.empty mappend = Set.union mconcat = Set.unions instance Ord k => Monoid (Map.Map k v ) where mempty = Map.empty mappend = Map.union mconcat = Map.unions instance Monoid (Seq.Seq a) where mempty = Seq.empty mappend = (Seq.<>) instance Functor Seq.Seq where fmap f xs = Seq.fromList (map f (Seq.toList xs)) instance Functor IM.IntMap where fmap = IM.map --instance Ord k => Functor (Map.Map k) where -- fmap = Map.map instance Monad Seq.Seq where a >>= b = mconcat ( map b (Seq.toList a)) return x = Seq.single x fail _ = Seq.empty instance MonadPlus Seq.Seq where -- should this match the Monoid instance? mplus = mappend mzero = Seq.empty -- --------------------------------------------------------------------------- John Meacham - California Institute of Technology, Alum. - john@foo.net ---------------------------------------------------------------------------