On 07/12/12 02:19, Edward Kmett wrote:
I am happy to announce the release of version 3.7 of the lens package, which provides "Lenses, Folds, and Traversals" for working with arbitrary data types.
Do you use types to index the fields of tuples? It's a good general mechanism to represent the "tupleness" of certain types. I had a quick look and it didn't seem you were doing this. For instance, consider this type: data P = MkP Int Bool Char If one wants to consider the three fields as separate items, one can construct a type that's an index to them: data PInd :: * -> * where PFirst :: PInd Int PSecond :: PInd Bool PThird :: PInd Char It's then straightforward to construct an isomorphism between P and "forall a. PInd a -> a". You can also use it to build lenses for the fields, etc. -- Ashley