[Haskell-cafe] The type class wilderness + Separating instances and implementations into separate packages
Johan Tibell
johan.tibell at gmail.com
Thu Nov 3 01:58:04 CET 2011
These are all very good questions! Here's my stab at it:
On Wed, Nov 2, 2011 at 11:28 AM, Ryan Newton <rrnewton at gmail.com> wrote:
> What is the right interface for a queue? What is the right interface for
> a random number generator?
>
For any given class I'd try to get a few experts/interested parties
together and discuss.
> I don't know, but in both cases you will find many packages on hackage
> offering different takes on the matter. In fact, there is a wilderness of
> alternative interfaces. We've had various discussions on this list about
> the number of alternative packages.
>
The lack of cohesion in our library offerings is a problem and so is the
lack of interfaces. We end up programming against concrete types way too
often.
> I'm fine with lots of packages, but I think it would be great if not every
> package introduced a new interface as well as a new implementation. If we
> could agree as a community on common interfaces to use for some basics,
> that would probably go a long way towards taming the type class wilderness.
> People have mentioned this problem before with respect to "Collections"
> generally.
>
Aside: The problem with collections is that we don't have the programming
language means to do this well yet (although soon!). The issue is that we
want to declare a type class where the context of the methods depends on
the instance e.g.
class MapLike m where
type Ctx :: Context -- Can't do this today!
insert Ctx => k -> v -> m -> m
Java et all cheats in their container hierarchy by doing unsafe casts (i.e.
they never solved this problem)!
>
> One basic part of reaching such a goal is separating interface from
> implementation. I ran into the following problems just in the last 24
> hours. In both cases I wanted to use a type class, but didn't want to
> depend on the whole package it lived in:
>
> - I wanted to use the Benchmarkable class in Criterion in my package.
> (Criterion deserving to be a "standard" package.) But I can't get that
> typeclass without depending on the whole Criterion package, which has
> several dependencies. And in fact on the machine I was on at the time some
> of those dependencies were broken, so I decided not to use Benchmarkable.
> - I wanted to use, or at least support, an existing class for Queues.
> I found the following:
>
>
> http://hackage.haskell.org/packages/archive/queuelike/1.0.9/doc/html/Data-MQueue-Class.html
>
I think the best option at the moment is to break out type classes in their
own packages. That's what I did with hashable.
How can we enumerate packages that at least purport to provide standard
> interfaces that you should both use and pick up to implement? On a Wiki
> page?
>
I would hope that we could get all the important interfaces into the
Haskell Platform eventually (and have all packages there use them).
-- Johan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111102/22f9fb16/attachment.htm>
More information about the Haskell-Cafe
mailing list