[Haskell-cafe] The Proliferation of List-Like Types
ross at soi.city.ac.uk
Wed Feb 20 10:44:37 EST 2008
On Wed, Feb 20, 2008 at 08:39:13AM -0600, John Goerzen wrote:
> I am concerned that the same thing is happening in Haskell. We now
> have three common list-like types: the regular list, strict
> ByteString, and lazy ByteString.
> This has created some annoying situations. For instance, a ByteString
> is great for reading data fast, but Parsec doesn't work on
> ByteStrings. I am glad that someone wrote a Parsec equivalent that
> does, which answers a real need. But this means that all the
> combinators in the hsemail library that implement standard RFC
> conventions won't be usable in my ByteString code, for instance.
As Henning pointed out, multiple parameter type classes are problematic
for core libraries at present.
An alternative might be explicit dictionaries. For example, a partial
solution would be to provide coinductive views, i.e. for all these types
to provide functions of a type like
full -> Maybe (item, full)
(Data.Map, Data.Set and Data.Sequence would each have two such functions),
and to have a library of generalized functions taking such functions as
splitAt :: (full -> Maybe (item, full)) ->
Int -> full -> ([item], full)
Parsing libraries could include a similar parameter within their monad.
That only covers the elimination side, of course.
More information about the Haskell-Cafe