This seems like exactly what I want, but there are two problems: I can't access the paper and it requires Generic Haskell. I'm just too much of newb to jump into generic Haskell :).

On Mon, Dec 28, 2009 at 7:41 PM, Dan Weston <westondan@imageworks.com> wrote:
This might be pertinent:

Alimarine et al, "There and Back Again: Arrows for Invertible Programming"
http://www.cs.ru.nl/A.vanWeelden/bi-arrows/


Jonathan Fischoff wrote:
Hi,
I would to create a list of tuples (or something similar) of invertible functions

[((a -> b), (b -> a)), ((b -> c), (c -> b)), ....

Such that I could call

forward invertibleFuctionList domainValue = ? -- composite all the functions
backward invertibleFuctionList rangeValue =    forward (reverse invertibleFuctionList) rangeValue  -- or something similar


I would also like to concat them. This sounds like a job for GADT that someone might have already tackled. Any ideas?

-Jonathan