\chapter{Conclusion} In this thesis we have looked at ways to generically add position information to recursive datatypes. We have looked at ways in which producers and consumers can be written down in such a way that the position information is constructed or consumed automatically. The solution we have chosen is based on the fixed point view of datatypes. By expressing a recursive type as a fixed point, it is possible to insert position information at every recursive position. We have implemented this solution in two ways: one using base functors (Chapter \ref{sec:fixedpoint}), where the programmer decides beforehand that the datatype is written with a type parameter for the children, and the other in terms MultiRec (Chapter \ref{sec:generic}), a library for generic programming for mutually recursive datatypes. The former implementation provides good type-safety in all aspects: the shape of the annotated datatype was exactly right, the producers can clearly distinguish between annotated and unannotated trees, and the algebras that we have developed can work with trees either with or without annotations. The major drawback of this implementation is that it can only work with a single datatype. The latter implementation solves the drawback of the first one: the generic programming library MultiRec, with which the second implementation is built, is designed to work with mutually recursive datatypes. By mimicking the family of datatypes with generic pattern functor building blocks, generic functions and datatypes can be built. But this is also the main problem: the generic constructors are not the same as the original ones, making it very difficult for the producer (in our case the parser) to build recursively annotated trees in an elegant way. Rather than ask the programmer to use the generic constructors (comprised of compositions of |L| and |R|), we allowed the original constructors for the price of a stateful construction model using monad transformer |YieldT|. With this, we have provided the first steps of turning generic position information from a design pattern into a library.