4import Data.Functor.Identity
8import qualified Control.Effect as L
12import qualified Effectful.Monad as E
13import qualified Effectful.Reader as E
14import qualified Effectful.State as E
15import qualified Effectful.State.Dynamic as DE
16import qualified Effectful.State.MVar as ME
19#ifdef VERSION_freer_simple
20import qualified Control.Monad.Freer as FS
21import qualified Control.Monad.Freer.Reader as FS
22import qualified Control.Monad.Freer.State as FS
26#ifdef VERSION_fused_effects
27import qualified Control.Algebra as FE
28import qualified Control.Carrier.Reader as FE
29import qualified Control.Carrier.State.Strict as FE
33import qualified Control.Monad.Reader as M
34import qualified Control.Monad.State as M
37#ifdef VERSION_polysemy
38import qualified Polysemy as P
39import qualified Polysemy.Reader as P
40import qualified Polysemy.State as P
43----------------------------------------
46countdownRef :: Integer -> (Integer, Integer)
47countdownRef n = if n <= 0 then (n, n) else countdownRef $ n - 1
48{-# NOINLINE countdownRef #-}
50----------------------------------------
53programMtl :: M.MonadState Integer m => m Integer
61{-# NOINLINE programMtl #-}
63countdownMtl :: Integer -> (Integer, Integer)
64countdownMtl n = flip M.runState n $ programMtl
66countdownMtlDeep :: Integer -> (Integer, Integer)
67countdownMtlDeep n = runIdentity
68 . runR . runR . runR . runR . runR
70 . runR . runR . runR . runR . runR
73 runR = flip M.runReaderT ()
75----------------------------------------
78programEffectfulStatic :: E.State Integer E.:> es => E.Eff es Integer
79programEffectfulStatic = do
85 programEffectfulStatic
86{-# NOINLINE programEffectfulStatic #-}
88countdownEffectfulStatic :: Integer -> (Integer, Integer)
89countdownEffectfulStatic n = E.runEff . E.runState n $ programEffectfulStatic
91countdownEffectfulStaticDeep :: Integer -> (Integer, Integer)
92countdownEffectfulStaticDeep n = E.runEff
93 . runR . runR . runR . runR . runR
95 . runR . runR . runR . runR . runR
96 $ programEffectfulStatic
100----------------------------------------
103programEffectfulMVar :: ME.State Integer E.:> es => E.Eff es Integer
104programEffectfulMVar = do
111{-# NOINLINE programEffectfulMVar #-}
113countdownEffectfulMVar :: Integer -> (Integer, Integer)
114countdownEffectfulMVar n = E.runEff . ME.runState n $ programEffectfulMVar
116countdownEffectfulMVarDeep :: Integer -> (Integer, Integer)
117countdownEffectfulMVarDeep n = E.runEff
118 . runR . runR . runR . runR . runR
120 . runR . runR . runR . runR . runR
121 $ programEffectfulMVar
123 runR = E.runReader ()
125----------------------------------------
126-- effectful (dynamic)
128programEffectfulDynamic :: DE.State Integer E.:> es => E.Eff es Integer
129programEffectfulDynamic = do
135 programEffectfulDynamic
136{-# NOINLINE programEffectfulDynamic #-}
138countdownEffectfulDynPure :: Integer -> (Integer, Integer)
139countdownEffectfulDynPure n = E.runEff . DE.runState n $ programEffectfulDynamic
141countdownEffectfulDynMVar :: Integer -> (Integer, Integer)
142countdownEffectfulDynMVar n = E.runEff . DE.runStateMVar n $ programEffectfulDynamic
144countdownEffectfulDynPureDeep :: Integer -> (Integer, Integer)
145countdownEffectfulDynPureDeep n = E.runEff
146 . runR . runR . runR . runR . runR
148 . runR . runR . runR . runR . runR
149 $ programEffectfulDynamic
151 runR = E.runReader ()
153countdownEffectfulDynMVarDeep :: Integer -> (Integer, Integer)
154countdownEffectfulDynMVarDeep n = E.runEff
155 . runR . runR . runR . runR . runR
157 . runR . runR . runR . runR . runR
158 $ programEffectfulDynamic
160 runR = E.runReader ()
162----------------------------------------
165#ifdef VERSION_fused_effects
167programFusedEffects :: FE.Has (FE.State Integer) sig m => m Integer
168programFusedEffects = do
175{-# NOINLINE programFusedEffects #-}
177countdownFusedEffects :: Integer -> (Integer, Integer)
178countdownFusedEffects n = FE.run . FE.runState n $ programFusedEffects
180countdownFusedEffectsDeep :: Integer -> (Integer, Integer)
181countdownFusedEffectsDeep n = FE.run
182 . runR . runR . runR . runR . runR
184 . runR . runR . runR . runR . runR
185 $ programFusedEffects
187 runR = FE.runReader ()
191----------------------------------------
194#ifdef VERSION_polysemy
196programPolysemy :: P.Member (P.State Integer) r => P.Sem r Integer
204{-# NOINLINE programPolysemy #-}
206countdownPolysemy :: Integer -> (Integer, Integer)
207countdownPolysemy n = P.run . P.runState n $ programPolysemy
209countdownPolysemyDeep :: Integer -> (Integer, Integer)
210countdownPolysemyDeep n = P.run
211 . runR . runR . runR . runR . runR
213 . runR . runR . runR . runR . runR
216 runR = P.runReader ()
220----------------------------------------
225programEff :: L.State Integer L.:< es => L.Eff es Integer
233{-# NOINLINE programEff #-}
235countdownEff :: Integer -> (Integer, Integer)
236countdownEff n = L.run . L.runState n $ programEff
238countdownEffDeep :: Integer -> (Integer, Integer)
239countdownEffDeep n = L.run
240 . runR . runR . runR . runR . runR
242 . runR . runR . runR . runR . runR
245 runR = L.runReader ()
249----------------------------------------
252#ifdef VERSION_freer_simple
254programFreerSimple :: FS.Member (FS.State Integer) es => FS.Eff es Integer
255programFreerSimple = do
262{-# NOINLINE programFreerSimple #-}
264countdownFreerSimple :: Integer -> (Integer, Integer)
265countdownFreerSimple n = FS.run . FS.runState n $ programFreerSimple
267countdownFreerSimpleDeep :: Integer -> (Integer, Integer)
268countdownFreerSimpleDeep n = FS.run
269 . runR . runR . runR . runR . runR
271 . runR . runR . runR . runR . runR
274 runR = FS.runReader ()
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list