Skip to content

Commit 177eb11

Browse files
authored
Very complex computation (#29)
* add veryComplexComputation * add myAsk
1 parent e8b2a0f commit 177eb11

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

MonadsAndEffects/3.3/myrwt.hs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ runMyRWT :: MyRWT m a -> [String] -> m (a, String)
1313
runMyRWT rwt = runWriterT . runReaderT rwt
1414

1515

16+
myAsk :: Monad m => MyRWT m [String]
17+
myAsk = ask
18+
19+
1620
myAsks :: Monad m => ([String] -> a) -> MyRWT m a
1721
myAsks = asks
1822

@@ -33,3 +37,25 @@ logFirstAndRetSecond = do
3337
myLift $ putStrLn $ "Second is " ++ show el2
3438
myTell el1
3539
return el2
40+
41+
42+
logFirstAndRetSecondSafe :: MyRWT Maybe String
43+
logFirstAndRetSecondSafe = do
44+
xs <- myAsk
45+
case xs of
46+
(el1 : el2 : _) -> myTell el1 >> return (map toUpper el2)
47+
_ -> myLift Nothing
48+
49+
50+
myWithReader :: (r' -> r)
51+
-> ReaderT r (WriterT String m) a
52+
-> ReaderT r' (WriterT String m) a
53+
myWithReader f r = ReaderT $ \e -> runReaderT r (f e)
54+
55+
56+
veryComplexComputation :: MyRWT Maybe (String, String)
57+
veryComplexComputation = do
58+
e1 <- myWithReader (filter $ even . length) logFirstAndRetSecondSafe
59+
myTell ","
60+
e2 <- myWithReader (filter $ odd . length) logFirstAndRetSecondSafe
61+
return (e1, e2)

0 commit comments

Comments
 (0)