DData in hierarchical libraries
John Meacham
john at repetae.net
Fri Feb 20 14:13:47 EST 2004
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 at foo.net
---------------------------------------------------------------------------
More information about the Libraries
mailing list