Home
Reading
Searching
Subscribe
Sponsors
Statistics
Posting
Contact
Spam
Lists
Links
About
Hosting
Filtering
Features Download
Marketing
Archives
FAQ
Blog
 
Gmane
From: Ashley Yakeley <ashley <at> semantic.org>
Subject: Proposal: Add Compositor class as superclass of Arrow
Newsgroups: gmane.comp.lang.haskell.libraries
Date: Saturday 13th October 2007 08:23:27 UTC (over 9 years ago)
http://hackage.haskell.org/trac/ghc/ticket/1773
(darcs patch attached to ticket)

The Compositor class has two members:

  class Compositor comp where
    identity :: comp a a
    (>>>) :: comp a b -> comp b c -> comp a c

with the obvious monoid. Since all Arrows are Compositors, make 
Compositor a superclass of Arrow.

A number of useful types are Compositors but not Arrows:

1. Bijections

   data Bijection a b = MkBijection (a -> b) (b -> a)

2. Codecs, i.e. encoder/decoder pairs such as charset converters

   data Codec base derived = MkCodec
   {
     encode :: derived -> base,
     decode :: base -> Maybe derived -- or other Monad
   }

   utf8 :: Codec [Word8] String
   xml :: Codec String XML

3. Lenses
These make updatable sections of data structures.

   data Lens s t = MkLens
   {
     lensGet :: s -> t,
     lensPutback :: t -> s -> s
   }

See http://www.cis.upenn.edu/~bcpierce/papers/lenses-etapsslides.pdf

4. Reified proofs of type identity
   These are useful if you use GADTs and type-witnesses a lot.

   newtype SameType a a' = MkSameType (forall f. f a -> f a')

Proposal period: two weeks, until 10-27
 
CD: 2ms