Skip to content

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.

Edited by Icelandjack
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information