import Data.List
main = do
contents <β getContents
let threes = groupsOf 3 (map read $ lines contents)
roadSystem = map (\[a,b,c] β> Section a b c) threes
path = optimalPath roadSystem
pathString = concat $ map (show . fst) path
pathTime = sum $ map snd path
putStrLn $ "ΠΡΡΡΠΈΠΉ ΠΏΡΡΡ: " ++ pathString
putStrLn $ "ΠΡΠ΅ΠΌΡ: " ++ show pathTime
ΠΠ½Π°ΡΠ°Π»Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π°. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ lines Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ Π²ΠΈΠ΄Π° "50\n10\n30\nβ¦ Π² ΡΠΏΠΈΡΠΎΠΊ ["50","10","30"β¦, ΠΈ ΡΡΠ½ΠΊΡΠΈΡ map read, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π² ΡΠΈΡΠ»Π°. ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ groupsOf 3, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠΎΠ² Π΄Π»ΠΈΠ½ΠΎΠΉ 3. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ (\[a,b,c] β> Section a b c) ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, Π΄Π°Π½Π½Π°Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π² ΡΠ΅ΠΊΡΠΈΡ. Π ΠΈΡΠΎΠ³Π΅ roadSystem ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΠΎΠ³ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ RoadSystem (ΠΈΠ»ΠΈ [Section]). ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ optimalPath, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΡΡ ΠΈ ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΌΠ΅, ΠΈ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡ .
Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ:
50
10
30
5
90
20
40
2
25
10
8
0
Π² ΡΠ°ΠΉΠ»Π΅ paths.txt ΠΈ Π·Π°ΡΠ΅ΠΌ Β«ΡΠΊΠΎΡΠΌΠΈΠΌΒ» Π΅Π³ΠΎ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
$ ./heathrow < paths.txt
ΠΡΡΡΠΈΠΉ ΠΏΡΡΡ: BCACBBC
ΠΡΠ΅ΠΌΡ: 75
ΠΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Data.Random, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΠΎΠ³ ΠΈ Β«ΡΠΊΠΎΡΠΌΠΈΡΡΒ» ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°, ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ foldl' Π²ΠΌΠ΅ΡΡΠΎ foldl ΠΈ foldl' (+) 0 Π²ΠΌΠ΅ΡΡΠΎ sum. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
$ ghc -0 heathrow.hs
Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° 0 Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π² ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΡ , ΠΊΠ°ΠΊ foldl ΠΈ sum.
11
ΠΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΎΡΡ
Π‘ΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠΎΡΡ, ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ Haskell Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ, ΡΠ΅ΠΌ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ . ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠΈΠΏΠ°Ρ , ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΊ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠ·ΡΡΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠ³ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ². Π’ΠΈΠΏ Int ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ β ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ ΠΈ Ρ. Π΄.
ΠΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΎΡΠΊΡΡΡΡ β ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΎΠ±Π΄ΡΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, ΠΈ ΡΠ²ΡΠ·Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΠΏΠΎΠ² ΡΠ·ΡΠΊΠ° Haskell, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π·Π½Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΠ±ΡΠ΅Π΅, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ ΠΈ Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ΅ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ ΠΎΡΡ ΠΌΡ Π½Π΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π½Π΅ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π΅Π³ΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π½Π°ΡΠ΅ΠΉ ΠΆΠΈΠ·Π½ΠΈ. Π Π³Π»Π°Π²Π΅ 7 Π±ΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΎΡΡ β ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΠ°ΠΌΠΈ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΠΈ Π²ΡΡ Π΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ². Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π±Π»ΠΈΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΈΡ Π²Π΅ΡΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ.
Π€ΡΠ½ΠΊΡΠΎΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ
ΠΠ°ΠΊ Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΈΠ· Π³Π»Π°Π²Ρ 7, ΡΡΠ½ΠΊΡΠΎΡΡ β ΡΡΠΎ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΊΠΈ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° Maybe ΠΈ Π΄Π΅ΡΠ΅Π²ΡΡ. Π ΡΠ·ΡΠΊΠ΅ Haskell ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ ΡΠΈΠΏΠΎΠ² Functor, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ fmap. Π€ΡΠ½ΠΊΡΠΈΡ fmap ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ fmap :: (a β> b) β> f a β> f b, ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡ: Β«ΠΠ°ΠΉΡΠ΅ ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ a ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ b ΠΈ ΠΊΠΎΡΠΎΠ±ΠΊΡ, Π³Π΄Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ a (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ a), ΠΈ Ρ Π²Π΅ΡΠ½Ρ ΠΊΠΎΡΠΎΠ±ΠΊΡ Ρ b (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ b) Π²Π½ΡΡΡΠΈΒ». ΠΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π΄ΠΎΠ±Π°Π²ΠΎΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° Maybe ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠΊΠΎΠ½ΡΠΈΡΡΡΡ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΏΠΈΡΠΊΠ°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π»ΠΈΠ±ΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ fmap ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΡ ΡΠ°Π½ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Functor, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡ * β> *; ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Maybe ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Maybe Int ΠΈΠ»ΠΈ Maybe String. ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Either, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Functor Either where, Π·Π°ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Functor (Either a) where. ΠΠ°ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π²ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ»ΠΈ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ fmap ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° Either a, ΠΎΠ½Π° ΠΈΠΌΠ΅Π»Π° Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠ°:
fmap :: (b β> c) β> Either a b β> Either a c
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ°ΡΡΡ Either a β ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° Either a ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ°.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ²
Π Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²Ρ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΈΠΏΡ (Π΅ΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½ΡΠΌ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠΈΠΏΠΎΠ²) ΡΠ²Π»ΡΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° Functor: [] ΠΈ Maybe, Either a, ΡΠ°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΡΠΈΠΏ Tree, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 7. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° Π²ΡΠ΅ΠΎΠ±ΡΠ΅Π΅ Π±Π»Π°Π³ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΈΠΏΠ° IO.
ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠΈΠΏΠΎΠΌ IO String, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΌΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡ Π΄Π»Ρ Π½Π°Ρ Π½Π΅ΠΊΡΡ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ΅ΠΌ Π²Π΅ΡΠ½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡ <β Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ do Π΄Π»Ρ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊ ΠΈΠΌΠ΅Π½ΠΈ. Π Π³Π»Π°Π²Π΅ 8 ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΡΠΈΠΊΠΈ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌΠΈ Π½ΠΎΠΆΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡ ΠΎΠ΄ΡΡ Π½Π°ΡΡΠΆΡ ΠΈ ΠΏΡΠΈΠ½ΠΎΡΡΡ Π½Π°ΠΌ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½Π΅ΡΠ»ΠΈ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½ΠΎΠ²Π° ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΈΠΏ IO. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ ΡΡΠΈΠΊΠ°ΠΌΠΈ Π½Π° Π½ΠΎΠΆΠΊΠ°Ρ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΈΠΏ IO Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΎΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΆΠ΅ ΡΡΠΎ ΡΠΈΠΏ IO ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Functorβ¦ ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ fmap Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΠΊ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠΎΡ ΠΊΠΎΠ΄:
instance Functor IO where
fmap f action = do
result <β action
return (f result)
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ do Π΄Π»Ρ ΡΠΊΠ»Π΅ΠΈΠ²Π°Π½ΠΈΡ Π΄Π²ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° fmap ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, Π΄Π°Π²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΠΌΡ result. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ return (f result). ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ return β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎΠ·Π΄Π°ΡΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, Π° ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π±Π»ΠΎΠΊ do, Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ return, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, Π° ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ f result Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΡΠΎΡ ΠΊΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°:
main = do
line <β getLine
let line' = reverse line
putStrLn $ "ΠΡ ΡΠΊΠ°Π·Π°Π»ΠΈ " ++ line' ++ " Π½Π°ΠΎΠ±ΠΎΡΠΎΡ!"
putStrLn $ "ΠΠ°, Π²Ρ ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π»ΠΈ " ++ line' ++ " Π½Π°ΠΎΠ±ΠΎΡΠΎΡ!"
Π£ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ°, ΠΈ ΠΌΡ ΠΎΡΠ΄Π°ΡΠΌ Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π½ΠΎ Π² ΠΏΠ΅ΡΠ΅Π²ΡΡΠ½ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅. Π Π²ΠΎΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ fmap: