<div dir="ltr"><div>Hi all</div><div><br></div><div>I am working on a variant of the exact printer which updates the annotation locations from the `EpaSpan` version to the `EpaDelta` version, as the printing happens<br></div><div><br></div><div>data EpaLocation = EpaSpan RealSrcSpan<br>                 | EpaDelta DeltaPos<br></div><div><br></div><div>The function doing the work is this<br></div><div><br></div><div>markAnnKw :: (Monad m, Monoid w)<br>  => EpAnn a -> (a -> EpaLocation) -> (a -> EpaLocation -> a) -> AnnKeywordId -> EP w m (EpAnn a)</div><div><br></div><div>which gets an annotation, a function to pull a specific location out, and one to update it.</div><div><br></div><div>I do not know much about lenses, but have a feeling that I could simplify things by using one.</div><div><br></div><div>Can anyone give me any pointers?</div><div><br></div><div>Alan<br></div><div><br></div></div>