combinators for type conversion (serialization/deserialization, with GADTs). See this blog post (outdated): http://cedeela.fr/universal-serialization-and-deserialization.html