Proposal: Make Semigroup as a superclass of Monoid
Henning Thielemann
lemming at henning-thielemann.de
Mon May 4 20:50:05 UTC 2015
On Mon, 4 May 2015, Edward Kmett wrote:
> The issue with a LiquidHaskell solution in this space, aside from the fact that it is an experiment that isn't
> part of the compiler or the language that we have, and uses assumptions about the way numbers work that don't
> hold for the ones we have, is that it is terribly invasive.
> In order to use it everything that ever wants to work with your shiny new non-empty list type needs to be
> written in LiquidHaskell to prove the non-empty invariant still holds. Refinement types are notoriously hard
> to use. On the other-hand a type like NonEmpty satisfies that invariant trivially: There is no empty
> constructor.
>
> The price of this is that it is a different data type, with different operations.
In my experience with my non-empty package I found that I can lift that
restriction by using type classes like Functor, Traversable etc.
> I love LiquidHaskell, but I'd be very hesitant to do anything or rather
> to not do anything predicated on its existence.
Although LiquidHaskell is cool, I also prefer to solve simple problems
with simple tools. Non-empty lists do not need a sophisticated prover
framework, it can be solved with simple Haskell 98.
More information about the Libraries
mailing list