File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed
Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change @@ -13,6 +13,10 @@ runMyRWT :: MyRWT m a -> [String] -> m (a, String)
1313runMyRWT rwt = runWriterT . runReaderT rwt
1414
1515
16+ myAsk :: Monad m => MyRWT m [String ]
17+ myAsk = ask
18+
19+
1620myAsks :: Monad m => ([String ] -> a ) -> MyRWT m a
1721myAsks = 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)
You can’t perform that action at this time.
0 commit comments