[Haskell-cafe] Factoring into type classes

Conor McBride conor at strictlypositive.org
Tue Jan 20 11:42:45 EST 2009


Hi folks

I have been known to venture the viewpoint that the
"newtype trick" might benefit from improved library
support, for example, here

   http://www.mail-archive.com/haskell-cafe@haskell.org/msg37213.html

This is in a similar vein to Derek's approach, if
accompanied by a little more grotesque whizzbangery.

On 19 Jan 2009, at 21:51, Derek Elkins wrote:

> On Mon, 2009-01-19 at 12:10 -0800, Iavor Diatchki wrote:
>>
>> Sure, the point is that you are essentially adding a type annotation,
>> which is like using a non-overloaded function.  Compare, for example:
>> "mappend add x y"  and "getSum (mappend (Sum x) (Sum y))".  I think
>> that the first one is quite a bit more readable but, of course, this
>> is somewhat subjective.
>
> data Iso a b = Iso { to :: a -> b, from :: b -> a }
>
> under :: Iso a b -> (b -> b) -> (a -> a)
> under iso = to iso ~> from iso
>
> under2 :: Iso a b -> (b -> b -> b) -> (a -> a -> a)
> under2 iso = to iso ~> under iso
>
> sumIso = Iso Sum getSum
>
> (+) = under2 sumIso mappend


Perhaps it's worth trying to push in this direction,
in search of a coherent kit.

After all, there's a lot of structure out there.

All the best

Conor




More information about the Haskell-Cafe mailing list