Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜Π·ΡƒΡ‡Π°ΠΉ Haskell Π²ΠΎ имя Π΄ΠΎΠ±Ρ€Π°!Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 60

Автор ΠœΠΈΡ€Π°Π½ Π›ΠΈΠΏΠΎΠ²Π°Ρ‡Π°

Π­Ρ‚ΠΎ отчасти ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ экзСмпляра для Ρ‚ΠΈΠΏΠ° Maybe, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° функция fmap примСняСтся ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ прСдставляСт ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ CJust), ΠΌΡ‹ Π½Π΅ просто примСняСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ содСрТимому, Π½ΠΎ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счётчик Π½Π° 1. Пока Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ всё ΠΊΡ€ΡƒΡ‚ΠΎ! ΠœΡ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ с этим:

ghci> fmap (++"-Ρ…Π°") (CJust 0 "Ρ…ΠΎ")

CJust 1 "Ρ…ΠΎ-Ρ…Π°"

ghci> fmap (++"-Ρ…Π΅") (fmap (++"-Ρ…Π°") (CJust 0 "Ρ…ΠΎ"))

CJust 2 "Ρ…ΠΎ-Ρ…Π°-Ρ…Π΅"

ghci> fmap (++"ля") CNothing

CNothing

ΠŸΠΎΠ΄Ρ‡ΠΈΠ½ΡΠ΅Ρ‚ΡΡ Π»ΠΈ этот Ρ‚ΠΈΠΏ Π·Π°ΠΊΠΎΠ½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ²? Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ подчиняСтся Π·Π°ΠΊΠΎΠ½Ρƒ, достаточно Π½Π°ΠΉΡ‚ΠΈ всСго ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ghci> fmap id (CJust 0 "Ρ…Π°-Ρ…Π°")

CJust 1 "Ρ…Π°-Ρ…Π°"

ghci> id (CJust 0 "Ρ…Π°-Ρ…Π°")

CJust 0 "Ρ…Π°-Ρ…Π°"

Как гласит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π°ΠΊΠΎΠ½ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ссли ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ id, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ просто Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ id с Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°. Наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это Π½Π΅ относится ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρƒ CMaybe. Π₯отя ΠΎΠ½ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ экзСмпляр класса Functor, ΠΎΠ½ Π½Π΅ подчиняСтся Π΄Π°Π½Π½ΠΎΠΌΡƒ Π·Π°ΠΊΠΎΠ½Ρƒ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ CMaybe Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, хотя ΠΎΠ½ ΠΈ притворяСтся Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ, использованиС Π΅Π³ΠΎ Π² качСствС Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ нСисправному ΠΊΠΎΠ΄Ρƒ. Когда ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π»ΠΈ ΠΌΡ‹ сначала ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, ΠΈΠ»ΠΈ ΠΆΠ΅ просто ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но ΠΏΡ€ΠΈ использовании Ρ‚ΠΈΠΏΠ° CMaybe это ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ слСдит, сколько Ρ€Π°Π· Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠ»ΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°!.. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΈΠΏ CMaybe подчинялся Π·Π°ΠΊΠΎΠ½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° Int Π½Π΅ измСнялось, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция fmap.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π·Π°ΠΊΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ. Но Ссли ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ подчиняСтся ΠΎΠ±ΠΎΠΈΠΌ Π·Π°ΠΊΠΎΠ½Π°ΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ прСдполоТСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Если Ρ‚ΠΈΠΏ подчиняСтся Π·Π°ΠΊΠΎΠ½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fmap со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ – Π½ΠΈΡ‡Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наш ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ абстрактным ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ любой Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Π»ΡŽΠ±Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ экзСмпляром класса Functor, Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΌΠΈΠ½ΡƒΡ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ удовлСтворяСт Π·Π°ΠΊΠΎΠ½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ строка Π·Π° строкой ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π»ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‹, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π˜Π·ΡƒΡ‡ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹ Π² достаточном количСствС, Π²Ρ‹ станСтС ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ для Π½ΠΈΡ… свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, слСдуСт Π»ΠΈ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏ Π·Π°ΠΊΠΎΠ½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ².

ИспользованиС Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ²

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ.



Π”ΠΎ настоящСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ Π±Ρ‹Π»ΠΈ сосрСдоточСны Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Но Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°? Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Если Ρƒ нас Π΅ΡΡ‚ΡŒ Just 3, ΠΈ ΠΌΡ‹ выполняСм Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ fmap (*) (Just 3), Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ? Из Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ экзСмпляра Ρ‚ΠΈΠΏΠ° Maybe для класса Functor ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ссли это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Just, Ρ‚ΠΎ функция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Just. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ выраТСния fmap (*) (Just 3) Π²Π΅Ρ€Π½Ρ‘Ρ‚ Just ((*) 3), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ записано Π² Π²ΠΈΠ΄Π΅ Just (3 *), Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСчСния. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ! ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚ΡƒΡŽ Π² конструктор Just!

Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ²:

ghci> :t fmap (++) (Just "эй")

fmap (++) (Just "эй") :: Maybe ([Char] –> [Char])

ghci> :t fmap compare (Just 'a')

fmap compare (Just 'a') :: Maybe (Char –> Ordering)

ghci> :t fmap compare "A LIST OF CHARS"

fmap compare "A LIST OF CHARS" :: [Char –> Ordering]

ghci> :t fmap (\x y z –> x + y / z) [3,4,5,6]

fmap (\x y z –> x + y / z) [3,4,5,6] :: (Fractional a) => [a –> a –> a]

Если ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ список символов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ compare, которая ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ (Ord a) => a –> a –> Ordering, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° Char –> Ordering, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция compare частично примСняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символов Π² спискС. Π­Ρ‚ΠΎ Π½Π΅ список Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° (Ord a) => a –> Ordering, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° a ΠΈΠΌΠ΅Π» Ρ‚ΠΈΠΏ Char, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ a обязано ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ρ‚ΠΈΠΏ Char.

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ, отобраТая значСния Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ «многопарамСтричСских» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ значСния Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. А Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ?.. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² – ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ, Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

ghci> let a = fmap (*) [1,2,3,4]

ghci> :t a

a :: [Integer –> Integer]

ghci> fmap (\f –> f 9) a

[9,18,27,36]

Но Ρ‡Ρ‚ΠΎ Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° Just (3 *) ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° Just 5, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· Just (3 *) ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Just 5? Π‘ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Ρƒ нас этого Π½Π΅ получится, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€, содСрТащий Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ \f –> f 9, ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это. Но ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΌ функция fmap, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая находится Π²Π½ΡƒΡ‚Ρ€ΠΈ значСния Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ произвСсти сопоставлСниС конструктора Just ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ для извлСчСния ΠΈΠ· Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Just 5, Π½ΠΎ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈ абстрактный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ.

ΠŸΠΎΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹

Π˜Ρ‚Π°ΠΊ, встрСчайтС класс Ρ‚ΠΈΠΏΠΎΠ² Applicative, находящийся Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Control.Applicative!.. Он опрСдСляСт Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: pure ΠΈ <*>. Он Π½Π΅ прСдоставляСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, поэтому Π½Π°ΠΌ придётся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΠ±Π΅, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ стало Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ класс ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

class (Functor f) => Applicative f where

   pure :: a –> f a

   (<*>) :: f (a –> b) –> f a –> f b

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… строк Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ!.. ΠŸΠ΅Ρ€Π²Π°Ρ строка начинаСтся с опрСдСлСния класса Applicative; Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ класса. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Ρ‚ΠΈΠΏΠ° экзСмпляр класса Applicative, ΠΎΠ½, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ экзСмпляр класса Functor. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ извСстно, Ρ‡Ρ‚ΠΎ конструктор Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу Applicative, ΠΌΠΎΠΆΠ½ΠΎ смСло ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ классу Functor, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fmap.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ опрСдСляСт, называСтся pure. Π•Π³ΠΎ сигнатура выглядит Ρ‚Π°ΠΊ: pure :: a –> f a. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ f ΠΈΠ³Ρ€Π°Π΅Ρ‚ здСсь Ρ€ΠΎΠ»ΡŒ нашСго экзСмпляра Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ язык Haskell ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ систСмой Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΈΡ‚ΠΎΠΌ всё, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ функция, – это ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎ объявлСнию Ρ‚ΠΈΠΏΠ°, ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ – Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Ѐункция pure Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого Ρ‚ΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ. БловосочСтаниС Β«Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎΒ» ΠΎΠΏΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π² памяти Π½Π°ΡˆΡƒ аналогию с ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΎΠΉ, хотя ΠΌΡ‹ ΠΈ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ всСгда Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Но Ρ‚ΠΈΠΏ a –> f a всё Ρ€Π°Π²Π½ΠΎ довольно наглядСн. ΠœΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² Π°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит Π² сСбС это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ pure – это ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π±Π΅Ρ€Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² Π½Π΅ΠΊΠΈΠΉ контСкст ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (ΠΈΠ»ΠΈ чистый контСкст) – ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <*> Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ интСрСсСн. Π£ Π½Π΅Π³ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°:

f (a –> b) –> f a –> f b

НапоминаСт Π»ΠΈ ΠΎΠ½ΠΎ Π²Π°ΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ? Оно ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° сигнатуру fmap :: (a –> b) –> f a –> f b. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <*> ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fmap. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ функция fmap ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π° ΠΈ примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ значСния Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <*> ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π² сСбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ – ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Π°, Π·Π°Ρ‚Π΅ΠΌ отобраТая с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.