Added variance annotation
Better monad instance generation
Added example using OptionT