Pattern synonyms for Cont, Writer, Reader, State, ...
Made this its own ticket, rather than using #12001. Are these worth adding?
import qualified Control.Monad.Cont as C
import Control.Monad.Cont hiding (runCont)
import qualified Control.Monad.Writer as W
import Control.Monad.Writer hiding (runWriter)
import qualified Control.Monad.Reader as R
import Control.Monad.Reader hiding (runReader)
import qualified Control.Monad.State as S
import Control.Monad.State hiding (runState)
pattern Cont :: ((a -> r) -> r) -> Cont r a
pattern Cont {runCont} <- (C.runCont -> runCont)
where Cont a = cont a
pattern Writer :: (a, w) -> Writer w a
pattern Writer {runWriter} <- (W.runWriter -> runWriter)
where Writer a = WriterT (Identity a)
pattern Reader :: (r -> a) -> Reader r a
pattern Reader {runReader} <- (R.runReader -> runReader)
where Reader a = reader a
pattern State :: (s -> (a, s)) -> State s a
pattern State {runState} <- (S.runState -> runState)
where State a = state a
The mtl API was changed way back when (before advent of pattern synonyms) which caused some confusion, LYAH still uses Writer
, State
in their examples.