{-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} module Data.Annotated.Pure where import BinderAnn.SrcInfo ---------------------------------------- -- Pure types that can be annotated by default class Annotated a where annotate :: a -> SrcInfo -> a instance {-# INCOHERENT #-} Annotated a where annotate a _ = a -- Annotate the return value of a monadic computation annotateM :: (Monad m, Annotated a) => m a -> SrcInfo -> m a annotateM ma ann = do a <- ma return (annotate a ann)