File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ module Essi where
2+
3+ import Control.Monad (when )
4+ import Control.Monad.Trans (lift )
5+ import Control.Monad.Trans.State
6+ import Control.Monad.Trans.Except
7+
8+
9+ tickCollatz :: State Integer Integer
10+ tickCollatz = do
11+ n <- get
12+ let res = if odd n then 3 * n + 1 else n `div` 2
13+ put res
14+ return n
15+
16+
17+ type EsSi = ExceptT String (State Integer )
18+
19+
20+ runEsSi :: EsSi a -> Integer -> (Either String a , Integer )
21+ runEsSi = runState . runExceptT
22+
23+
24+ go :: Integer -> Integer -> State Integer Integer -> EsSi ()
25+ go lower upper s = do
26+ n <- lift get
27+ let next = execState s n
28+ lift $ put next
29+ when (next >= upper) (throwE " Upper bound" )
30+ when (next <= lower) (throwE " Lower bound" )
31+
32+
33+ go2 :: Integer -> Integer -> State Integer Integer -> EsSi ()
34+ go2 lower upper s = do
35+ lift s
36+ n <- lift get
37+ when (n >= upper) (throwE " Upper bound" )
38+ when (n <= lower) (throwE " Lower bound" )
You can’t perform that action at this time.
0 commit comments