!~@,      !"#$%&'()*+(non-portable (requires the kitchen sink) experimentalEdward Kmett <ekmett@gmail.com>JClass alias to get back an approximation of the original, easy-to-specify  class where available Now of course we can have "s and ,s float to the top of a do5 expression, so we need a way to convert them to any # or  instance respectively Usage: go (do something)  Traditional Control.Monad.mzero3, note this probably has lost its type inference.  You probably want +. The traditional )L, note this probably has lost its type inference where you want to use it.  Break out mplus !"Same trick using with , to build a canonical ), here we exploit the  laws to make a canonical + . Has no members except bottom. #qWhen a parameterized monad can be used without varying its parameter, we can get the ease of use of the original Monad class. $(Implement parameterized monads like Oleg'Ss restricted monads, but vary the monad itself rather than restrict its parameters %&'6Restrict the cases where we allow pattern matching to (.. You have to explicitly supply this for your # ()An inferable version of Prelude.return *+An inferable version of Control.Monad.mzero -RWe we losing type inference for MonadZero anyways, plumb around the special cases .+its trivial to map a function over nothing /0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw,xyz{|}~ !"#$%&'()*+,'($%&* !"#)+  !!"#$%&%&'(()*+      !"#$%&'()*+,-./01234565789:;:<:=:>:?:@:A:B:C:D:E:F:G:H0IJ0IK0IL0IM0IN0IO0IO0IP0IQ0IQ0RS0RT0RU0RV0RW0RX0RY0RZ0R[0R\0R\0R]0R^0R^0_`0_a0_a0bc0bd0be0fg0fh0fi0fj0fk0fl0fl0fm0fn0fn0op0oq0rs0tu0tv0tw0tx0ty0tz0{|0{}0{~0{0{0{01monad-param-0.0.2Control.Monad.Parameterizedbase Control.MonadapliftM5liftM4liftM3liftM2liftMunlesswhen replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMjoinmsumforM_forMfilterMguardmapM_mapM sequence_sequence MonadPlusGogo MonadZeromzeroMReturnreturnMMPlusmplusMZeroMonadBind>>=>>Failfailreturn=<<mzero mtl-1.1.1.0Control.Monad.IdentityIdentity$fMPlusMZeroaa$fFunctorMZeroControl.Monad.FixmfixMonadFix Data.FunctionfixGHC.Conc registerDelay writeTVarreadTVar readTVarIO newTVarIOnewTVaralwaysalwaysSucceedscatchSTMorElseretry atomicallySTMTVarControl.Monad.Cont withContTmapContTwithContmapContrunContContrunContTContTControl.Monad.State.Lazy withStateT mapStateT execStateT evalStateT withStatemapState execState evalStaterunStateState runStateTStateTControl.Monad.ListrunListTListTControl.Monad.Error mapErrorT runErrorTErrorTControl.Monad.Reader withReaderT mapReaderT withReader mapReader runReaderReader runReaderTReaderTControl.Monad.Cont.ClasscallCC MonadContControl.Monad.State.Class MonadStateControl.Monad.Error.ClassstrMsgnoMsgError catchError throwError MonadErrorControl.Monad.Writer.Classcensorlistenspasslistentell MonadWriter runIdentity stm-2.1.2.2Control.Monad.STMcheckControl.Concurrent.STM.TArrayTArrayControl.Concurrent.STM.TMVar isEmptyTMVar swapTMVar readTMVar tryPutTMVarputTMVar tryTakeTMVar takeTMVarnewEmptyTMVarIO newEmptyTMVar newTMVarIOnewTMVarTMVarControl.Concurrent.STM.TChan isEmptyTChan unGetTChandupTChan readTChan writeTChan newTChanIOnewTChanTChan