ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ newtype ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² Π² Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ β Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΠΎΠ±Ρ Π΄Π»Ρ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ newtype Π΄Π»Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠΉ Π½Π°ΠΌΠΈ ΡΠΈΠΏ ΠΎΡΠ΄Π΅Π»ΡΠ½ ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΏ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ newtype:
newtype CharList = CharList { getCharList :: [Char] }
ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++, ΡΡΠΎΠ±Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° CharList ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠ° [Char]. ΠΠ΅Π»ΡΠ·Ρ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++, ΡΡΠΎΠ±Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° CharList, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ, Π° ΡΠΈΠΏ CharList Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ, Ρ ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ CharList ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° CharList Π² ΡΠΏΠΈΡΠΊΠΈ, ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ++, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π΅ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² CharList.
ΠΠΎΠ³Π΄Π° Π² Π½Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΡΠΈΠΏΠ° newtype ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΈ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ β Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° newtype ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΠΏΠΎΠ»Ρ. ΠΠ»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ (ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ deriving) Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ.
ΠΠ° Π΄Π΅Π»Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ newtype ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ data, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΉΠΌΠ°Π΅ΡΠ΅ ΡΠ΅Π±Ρ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ newtype.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ data ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΠΌΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²Π»Π΅ΡΡΡΡ Π½Π΅ Π½Π° ΡΡΡΠΊΡ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΈ ΠΏΠΎΠ»Π΅ΠΉ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ β Π²ΡΠ΅Π³ΠΎ, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈ Maybe-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ Π΄Π΅ΡΠ΅Π²ΡΡΠΌΠΈ.
ΠΠΎΠ΄Π²Π΅Π΄ΡΠΌ ΠΈΡΠΎΠ³ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β’ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π²Π°ΡΠΈ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΠΈΠΏΠΎΠ² Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΈ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅ ΠΈ Π±ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌΠΈ, Π²Π°ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½ΡΠΆΠ½Ρ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ ΡΠΈΠΏΠΎΠ²;
β’ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²Π·ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ ΠΈ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΡΠΉ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ², ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΠΌ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ newtype;
β’ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅, Π΅ΡΡΡ ΡΠ°Π½Ρ, ΡΡΠΎ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ data.
Π ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΡΠ°Ρ ΠΎ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π°Ρ
ΠΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ Haskell ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΊ ΡΠΈΠΏΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π½Π΅ΠΊΠΈΠΌ ΡΡ ΠΎΠΆΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡ Π½Π°ΡΠ°Π»ΠΈ Ρ ΠΏΡΠΎΡΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ² Π²ΡΠΎΠ΄Π΅ ΠΊΠ»Π°ΡΡΠ° Eq, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ, ΠΈ ΠΊΠ»Π°ΡΡΠ° Ord β Π΄Π»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ Functor ΠΈ Applicative.
Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΈΠΏ, ΠΌΡ Π΄ΡΠΌΠ°Π΅ΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ (ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ), Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ°Π΅ΠΌ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ°ΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΈΠΏΠΎΠ² Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΌ Π½Π°ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ ΡΠ°Π·ΡΠΌΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° Π±ΡΠ»ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Eq. ΠΡΠ»ΠΈ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π½Π°Ρ ΡΠΈΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠ½ΠΊΡΠΎΡΠ° β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor, ΠΈ Ρ. Π΄.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ * β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠΈΡΠ»Π° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°Π΅Ρ ΠΈΡ . ΠΡΠ»ΠΈ ΠΌΡ ΡΠΌΠ½ΠΎΠΆΠΈΠΌ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΈΡΠ»ΠΎ Π½Π° 1, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ ΡΡΠΎΠΌΡ ΡΠΈΡΠ»Ρ. ΠΠ΅Π²Π°ΠΆΠ½ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π»ΠΈ ΠΌΡ 1 * x ΠΈΠ»ΠΈ x * 1 β ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ x. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ΅ΡΡΡ. ΠΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°ΡΡ ΡΠΈΡΠ»Π°, ΠΎΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠΏΠΈΡΠΊΠ° ΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½ΠΈΡΡΠ΅Ρ ΠΈΡ . Π ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ *, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ++. ΠΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ: [].
ghci> 4 * 1
4
ghci> 1 * 9
9
ghci> [1,2,3] ++ []
[1,2,3]
ghci> [] ++ [0.5, 2.5]
[0.5,2.5]
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ * Π²ΠΌΠ΅ΡΡΠ΅ Ρ 1 ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ Π½Π°ΡΡΠ΄Ρ Ρ [] ΡΠ°Π·Π΄Π΅Π»ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
β’ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°;
β’ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ;
β’ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ.
ΠΡΡΡ ΠΈ Π΅ΡΡ Π½Π΅ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, Ρ ΠΎΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΡΠΎΠ»Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΡ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, Π½Π΅Π²Π°ΠΆΠ΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π»ΠΈ ΠΌΡ (3 * 4) * 5 ΠΈΠ»ΠΈ 3 * (4 * 5), ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ 60. Π’ΠΎ ΠΆΠ΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ ΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ++:
ghci> (3 * 2) * (8 * 5)
240
ghci> 3 * (2 * (8 * 5))
240
ghci> "ΠΎΠΉ" ++ ("Π»Ρ" ++ "Π»ΠΈ")
"ΠΎΠΉΠ»ΡΠ»ΠΈ"
ghci> ("ΠΎΠΉ" ++ "Π»Ρ") ++ "Π»ΠΈ"
"ΠΎΠΉΠ»ΡΠ»ΠΈ"
ΠΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΡΡΡΡ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ * Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π΅Π½, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ ΡΠΎΠΆΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ β, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (5 β 3) β 4 ΠΈ 5 β (3 β 4) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΠ½Π°Ρ ΠΎΠ± ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ , ΠΌΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Π½Π°ΡΠΊΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΌΠΎΠ½ΠΎΠΈΠ΄Ρ!
ΠΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ² Monoid
ΠΠΎΠ½ΠΎΠΈΠ΄ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡΠ° (Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ³Π΄Π° ΡΡΠΎ-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΈ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ ΡΡΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 1 ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ *, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ [] ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ++. Π ΠΌΠΈΡΠ΅ ΡΠ·ΡΠΊΠ° Haskell Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ½ΠΎΠΈΠ΄ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅Π»ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ² Monoid. ΠΠ½ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ½ΠΎΠΈΠ΄Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ²:
class Monoid m where
mempty :: m
mappend :: m β> m β> m mconcat :: [m] β> m
mconcat = foldr mappend mempty
ΠΠ»Π°ΡΡ ΡΠΈΠΏΠΎΠ² Monoid ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Data.Monoid. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ Ρ Π½ΠΈΠΌ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π°ΠΌ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ° Monoid ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ m Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ² Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ°. Π ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² Functor ΠΈ Applicative, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ Π±ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠΈΠΏΠ°, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ mempty. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π²ΡΠΎΠ΄Π΅ minBound ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° Bounded. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ mempty ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π°.
ΠΠ°Π»Π΅Π΅, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ mappend, ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π΄ΠΎΠ³Π°Π΄Π°Π»ΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°Π·Π²Π°ΡΡ ΡΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ mappend Π±ΡΠ»ΠΎ ΠΎΡΡΠ°ΡΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ++ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠΏΠΈΡΠΊΠ° ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π² ΠΊΠΎΠ½Π΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ * Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ β Π΄Π²Π° ΡΠΈΡΠ»Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ. ΠΠΎΠ³Π΄Π° Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ° Monoid, Π²Ρ ΠΏΠΎΠΉΠΌΡΡΠ΅, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½ΠΈΡ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΌΡΡΠ»ΠΈΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ; ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ mappend ΠΊΠ°ΠΊ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΌΠΎΠ½ΠΎΠΈΠ΄Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ΅ΡΡΠ΅.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ mconcat. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ½ΠΎΠΈΠ΄Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΠΈΡ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ mappend ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°. ΠΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ mempty Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΡΠ°Π²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ mappend. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ², ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΠΈ mconcat. ΠΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΈΠΏΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Monoid, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ mempty ΠΈ mappend. Π₯ΠΎΡΡ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΡ mconcat ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ.