162
155
-- | Restore state after computation.
164
157
localState = bracket_ get put
166
159
-- Read -------------------------------------------------------------------
168
161
readM :: (Error e, MonadError e m, Read a) => String -> m a
169
162
readM s = case reads s of
172
165
throwError $ strMsg $ "readM: parse error string " ++ s
177
168
-- RETIRED STUFF ----------------------------------------------------------
179
183
{- RETIRED, Andreas, 2012-04-30. Not used.
180
184
concatMapM :: Applicative m => (a -> m [b]) -> [a] -> m [b]
181
185
concatMapM f xs = concat <$> traverse f xs