Hi,

These days I find the notion of "inverse function" might be useful,
the basic idea is to keep a pair of function f and g which are the inverse functions of each other
and then manipulate on this pair of functions.

The detail is both on my blog post:

http://javran.github.io/posts/2014-03-17-capture-the-notion-of-invertible-functions.html

and also code review:

http://codereview.stackexchange.com/questions/44550/capture-the-notion-of-invertible-functions

I think this is an interesting idea and want to share it with you.
Advice and comments are welcomed and appreciated since I learn haskell through LYAH and some wiki pages
and still not sure about what would be the most idiomatic way of doing it in haskell.

Thanks,

--
Javran (Fang) Cheng