The answer is, I'm working on a recently semi-released package called TrieMap.
The objective of this package, building off of the work in this paper, is to automatically derive the type of a generalized trie for any algebraic type based on its algebraic representation. (I am working on writing up my methods for publication.)
Of course, if I could get automatic access to the mechanisms of a type's constructors, I wouldn't even require users to describe the algebraic representation of their type...