ΠΠ΅Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΠ·ΡΡΠΈΡΡ ΠΊΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ² Functor, ΡΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. ΠΠΎΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ:
fmap :: (a -> b) -> f a -> f b
ΠΡΠ°ΠΊ, ΡΡΠΎ Ρ Π½Π°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ? ΠΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ fmap ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ Π½Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π’ΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ fmap Π²Π΅ΡΡΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½. ΠΠΎ Π²ΡΠ΅Ρ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ² ΡΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΈΠ³ΡΠ°Π²ΡΠΈΠΉ ΡΠΎΠ»Ρ ΡΠΈΠΏΠ° Π² ΠΊΠ»Π°ΡΡΠ΅, Π±ΡΠ» Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ a Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ (==) :: (Eq a) => a β> a β> Bool. ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ f Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π½Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Int, Bool ΠΈΠ»ΠΈ Maybe String); Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ β ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. (ΠΠ°ΠΏΠΎΠΌΠ½Ρ: Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Maybe Int ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ, Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Maybe β ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ² Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ.) ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ fmap ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΎΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠΏΡ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΎΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½Π½ΡΠΉ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠΈΠΏΡ.
ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π²ΡΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ. ΠΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².
ΠΠΌ-ΠΌβ¦ ΡΡΠΎ-ΡΠΎ ΠΌΠ½Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ fmap! ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ map, Π²ΠΎΡ ΠΎΠ½Π°:
map :: (a β> b) β> [a] β> [b]
Π, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ! Π€ΡΠ½ΠΊΡΠΈΡ map Π±Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· a Π² b ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° a ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° b. ΠΡΡΠ·ΡΡ, ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΎΡ! Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΡ map β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ fmap, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠΏΠΈΡΠΊΠ°Ρ . ΠΠΎΡ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΄Π΅Π»Π°Π½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Functor:
instance Functor [] where
fmap = map
Π Π²ΡΡ! ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΌΡ Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ instance Functor [a] where, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ
fmap :: (a β> b) β> f a β> f b
ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ f Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ. ΠΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ [a] β ΡΡΠΎ ΡΠΆΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° a), Π° Π²ΠΎΡ [] β ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ; ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠ°ΠΊ [Int], [String] ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ [[String]].
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠΎΠ² ΡΡΠ½ΠΊΡΠΈΡ fmap β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ map, ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠΏΠΈΡΠΊΠ°Ρ :
map :: (a β> b) β> [a] β> [b]
ghci>fmap (*2) [1..3]
[2,4,6]
ghci> map (*2) [1..3]
[2,4,6]
Π§ΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ map ΠΈΠ»ΠΈ fmap ΠΊ ΠΏΡΡΡΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ? ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΠΏΡΡΡ ΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΠΎ ΡΡΠ½ΠΊΡΠΈΡ fmap ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠ° [a] Π² ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠ° [b].
ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor Π΄Π»Ρ ΡΠΈΠΏΠ° Maybe
Π’ΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΈΠΏΠ°ΠΌ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ, ΡΡΠΎ ΡΠΏΠΈΡΠΊΠΈ β ΡΡΠΎ ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΎΡΡΠ΅ΠΊΠΎΠ²; Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΡΡΡΠΌΠΈ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡΡΠ΅ΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΡΡΡΠ΅, ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π½ΠΈΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ. Π ΡΡΠΎ Π΅ΡΡ ΡΠΌΠ΅Π΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ²? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΠΏ Maybe. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«ΠΏΡΡΡΠΎΠΉ ΠΊΠΎΡΠΎΠ±ΠΊΠΎΠΉΒ», ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Nothing, ΠΈΠ»ΠΈ ΠΆΠ΅ Π² Π½ΡΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ "Π₯Π-Π₯Π", ΠΈ ΡΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠ°Π²Π΅Π½ Just "Π₯Π-Π₯Π".
ΠΠΎΡ ΠΊΠ°ΠΊ ΡΠΈΠΏ Maybe ΡΠ΄Π΅Π»Π°Π½ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ:
instance Functor Maybe where
fmap f (Just x) = Just (f x)
fmap f Nothing = Nothing
ΠΡΡ ΡΠ°Π· ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΠΌΡ Π·Π°ΠΏΠΈΡΠ°Π»ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ instance Functor Maybe where Π²ΠΌΠ΅ΡΡΠΎ instance Functor (Maybe m) where β ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° YesNo. Π€ΡΠ½ΠΊΡΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π½Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΡΠ»ΠΈ Π²Ρ ΠΌΡΡΠ»Π΅Π½Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ f Π½Π° Maybe, ΡΡΠ½ΠΊΡΠΈΡ fmap ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ (a β> b) β> Maybe a β> Maybe b, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΏΠ° Maybe, ΡΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π±Ρ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π΅Ρ. ΠΠΎ Π΅ΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ f Π½Π° (Maybe m), ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ (a β> b) β> Maybe m a β> Maybe m b, ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΏ Maybe ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΠ°ΠΊ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ fmap Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Maybe β ΡΡΠΎ Nothing, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Nothing. ΠΡΠ»ΠΈ ΠΌΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ Β«ΠΏΡΡΡΡΡ ΠΊΠΎΡΠΎΠ±ΠΊΡΒ», ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Β«ΠΏΡΡΡΡΡ ΠΊΠΎΡΠΎΠ±ΠΊΡΒ», ΡΡΠΎ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ map Π΄Π»Ρ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Just, ΡΠΎ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ Just:
ghci> fmap (++ " ΠΠ ΠΠΠΠ’, Π― ΠΠΠ£Π’Π Π JUST") (Just "Π‘Π΅ΡΡΡΠ·Π½Π°Ρ ΡΡΡΠΊΠ°.")
Just "Π‘Π΅ΡΡΡΠ·Π½Π°Ρ ΡΡΡΠΊΠ°. ΠΠ ΠΠΠΠ’, Π― ΠΠΠ£Π’Π Π JUST"
ghci> fmap (++ " ΠΠ ΠΠΠΠ’, Π― ΠΠΠ£Π’Π Π JUST") Nothing
Nothing
ghci> fmap (*2) (Just 200)
Just 400
ghci> fmap (*2) Nothing
Nothing
ΠΠ΅ΡΠ΅Π²ΡΡ ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ
ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor, β ΡΡΠΎ Π½Π°Ρ ΡΠΈΠΏ Tree. ΠΠ΅ΡΠ΅Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ° Tree ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ fmap ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΏΠ° Tree, Π΅Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠ° Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° Π±Ρ ΡΠ°ΠΊ: (a β> b) β> Tree a β> Tree b.
ΠΠ»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ. ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΡΡΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ. ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° β ΡΡΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ ΠΈΠ· ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΈ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΠ΅Π², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
instance Functor Tree where
fmap f EmptyTree = EmptyTree
fmap f (Node x left right) = Node (f x) (fmap f left) (fmap f right)
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ:
ghci> fmap (*2) EmptyTree
EmptyTree
ghci> fmap (*4) (foldr treeInsert EmptyTree [5,7,3])
Node 20 (Node 12 EmptyTree EmptyTree) (Node 28 EmptyTree EmptyTree)
ΠΠΏΡΠΎΡΠ΅ΠΌ, ΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ! ΠΡΠ»ΠΈ ΡΠΈΠΏ Tree ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠ²ΡΠΌ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π΅Π³ΠΎ ΡΠ·Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, negate ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ.
Π ΡΠΈΠΏ Either ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ
ΠΡΠ»ΠΈΡΠ½ΠΎ! ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΡ Either a b? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ? ΠΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ² Functor ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ² Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π° Ρ ΡΠΈΠΏΠ° Either ΠΈΡ Π΄Π²Π°. ΠΠΌ-ΠΌβ¦ ΠΡΠΈΠ΄ΡΠΌΠ°Π» β ΠΌΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Either, Β«ΡΠΊΠΎΡΠΌΠΈΠ²Β» Π΅ΠΌΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΠ΄ΠΈΠ½ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΎΡ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΠΏΠ° Either ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ :
instance Functor (Either a) where
fmap f (Right x) = Right (f x)
fmap f (Left x) = Left x
Π§ΡΠΎ ΠΆΠ΅ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ? ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π·Π°ΠΏΠΈΡΠΈ, ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ Π΄Π»Ρ ΡΠΈΠΏΠ° Either, Π° Π΄Π»Ρ Either a. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Either β ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π° Either a β ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠ½ΠΊΡΠΈΡ fmap Π±ΡΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Either a, ΡΠΈΠ³Π½Π°ΡΡΡΠ° ΡΠΈΠΏΠ° Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
(b β> c) β> Either a b β> Either a c
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ
(b β> c) β> (Either a) b β> (Either a) c
Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ Right, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π² Left. ΠΠΎΡΠ΅ΠΌΡ? ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΈΠΏ Either a b:
data Either a b = Left a | Right b
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π½Π΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΎΠ±Π΅ΠΈΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΠΌ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ a ΠΈ b Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΈΠΏΠΎΠΌ. ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎ b Ρ Π½Π°Ρ β ΡΡΡΠΎΠΊΠ°, Π° a β ΡΠΈΡΠ»ΠΎ; ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’Π°ΠΊΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π° ΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ fmap Π΄Π»Ρ ΡΠΈΠΏΠ° Either a, ΡΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π° Π²ΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½; ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ Left.
ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π½Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ ΠΊΠΎΡΠΎΠ±ΠΊΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ² ΡΠ°ΡΡΡ Left ΠΊΠ°ΠΊ ΠΏΡΡΡΡΡ ΠΊΠΎΡΠΎΠ±ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ±ΠΎΠΊΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΏΠΎΡΡΠ½ΡΡΡΠ΅Π΅, ΠΏΠΎΡΠ΅ΠΌΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΡΠΎ.
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ Data.Map ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Ρ ΡΠ°Π½ΡΡ (ΠΈΠ»ΠΈ Π½Π΅ Ρ ΡΠ°Π½ΡΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠΈΠΏΠ° Map k v ΡΡΠ½ΠΊΡΠΈΡ fmap Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ v β> v' Π½Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΠΈΠΏΠ° Map k v ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Map k v'.
ΠΠ ΠΠΠΠ§ΠΠΠΠ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π°ΠΏΠΎΡΡΡΠΎΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΈΠΏΠ°Ρ (ΠΊΠ°ΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΅Π³ΠΎ ΠΈ Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ). ΠΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡ ΠΎΠΆΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ, Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ ΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°.
ΠΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΠΏΠ° Map k ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor!
ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ² Functor ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°Π»ΠΈΡΡ Π² ΡΠ°ΡΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². Π ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π³Π»Π°Π² ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Π·Π°ΠΊΠΎΠ½Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ².