@@ -72,12 +72,18 @@ instance (Monad m, Monoid d) => MonadDeclare d (DeclareT d m) where
7272looks :: MonadDeclare d m => (d -> a) -> m a
7373looks f = f <$> look
7474
75+-- | Evaluate @'DeclareT' d m a@ computation,
76+-- ignoring new output @d@.
7577evalDeclareT :: Monad m => DeclareT d m a -> d -> m a
7678evalDeclareT (DeclareT f) d = snd `liftM` f d
7779
80+-- | Execute @'DeclateT' d m a@ computation,
81+-- ignoring result and only producing new output @d@.
7882execDeclareT :: Monad m => DeclareT d m a -> d -> m d
7983execDeclareT (DeclareT f) d = fst `liftM` f d
8084
85+-- | Evaluate @'DeclareT' d m a@ computation,
86+-- starting with empty output history.
8187undeclareT :: (Monad m, Monoid d) => DeclareT d m a -> m a
8288undeclareT = flip evalDeclareT mempty
8389
@@ -91,15 +97,22 @@ undeclareT = flip evalDeclareT mempty
9197-- * a writer monad with the extra ability to read all previous output.
9298type Declare d = DeclareT d Identity
9399
100+-- | Run @'Declare' d a@ computation with output history @d@,
101+-- producing result @a@ and new output @d@.
94102runDeclare :: Declare d a -> d -> (d, a)
95103runDeclare m = runIdentity . runDeclareT m
96104
105+-- | Evaluate @'Declare' d a@ computation, ignoring output @d@.
97106evalDeclare :: Declare d a -> d -> a
98107evalDeclare m = runIdentity . evalDeclareT m
99108
109+-- | Execute @'Declate' d a@ computation, ignoring result and only
110+-- producing output @d@.
100111execDeclare :: Declare d a -> d -> d
101112execDeclare m = runIdentity . execDeclareT m
102113
114+-- | Evaluate @'DeclareT' d m a@ computation,
115+-- starting with empty output history.
103116undeclare :: Monoid d => Declare d a -> a
104117undeclare = runIdentity . undeclareT
105118