
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.
Yes!
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. Nicolas