mapM_ for bytestring

Nicolas Trangez nicolas at
Wed Sep 11 15:56:25 CEST 2013

On Wed, 2013-09-11 at 14:35 +0100, Duncan Coutts wrote:
> For mapM etc, personally I think a better solution would be if
> ByteString and Text and other specialised containers could be an
> instance of Foldable/Traversable.


>  Those classes define mapM etc but
> currently they only work for containers that are polymorphic in their
> elements, so all specialised containers are excluded.

Indeed :-( Hence my question a couple of days ago.

>  I'm sure there
> must be a solution to that (I'd guess with type families) and that
> would
> be much nicer than adding mapM etc to bytestring itself. We would then
> just provide efficient instances for Foldable/Traversable.

I looked into this when this thread started, but bumped into at least
one 'issue': when defining (OTOH) something like

import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BS8

class Foldable t where
    type Elem c :: *
    foldr :: (Elem t -> b -> b) -> b -> t -> b

instance Foldable BS.ByteString where
    type Elem BS.ByteString = Word8
    foldr = BS.foldr

instance Foldable BS8.ByteString where
    type Elem BS8.ByteString = Char
    foldr = BS8.foldr

which fails because BS.ByteString and BS8.ByteString are the same.


More information about the Libraries mailing list