ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ² Functor ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°Π»ΠΈΡΡ Π² ΡΠ°ΡΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². Π ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π³Π»Π°Π² ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ Π·Π°ΠΊΠΎΠ½Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ².
Π‘ΠΎΡΡΠ° ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏ-ΡΡ
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΌΠ½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (Either String β ΡΡΠΎ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Either String Int). ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΈΠΏΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ ΡΠΈΠΏΠΎΠ². Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΡ Π²ΡΡΡΠ½ΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΏΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠΌ ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ²ΠΎΡ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Π² ΡΡΡΠ°Π½Ρ ΡΠ·ΡΠΊΠ° Haskell, ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠΎΠΉΠΌΡΡΠ΅, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΎ, β Π½Π΅ ΡΡΠΎΠΈΡ ΡΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΠ»Π½ΠΎΠ²Π°ΡΡΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠ²ΠΎΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°, ΡΡΠΎ Π΄Π°ΡΡ Π²Π°ΠΌ ΡΡΡΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ².
ΠΡΠ°ΠΊ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ 3, "ΠΠ" ΠΈΠ»ΠΈ takeWhile (ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ Ρ. Π΄.), ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ. Π’ΠΈΠΏΡ β ΡΡΠΎ Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠΊ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΈΡ . ΠΠΎ ΠΈ ΡΠΈΠΏΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΡΠΊΠΈ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΡΡΠ°ΠΌΠΈ. Π‘ΠΎΡΡ β ΡΡΠΎ Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ Β«ΡΠΈΠΏΠ° ΡΠΈΠΏΠΎΠ²Β». ΠΠ²ΡΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΡΡΠ° ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ? ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΡΡ ΡΠΈΠΏΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ :k Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅ GHCi.
ghci> :k Int
Int :: *
ΠΠ²ΡΠ·Π΄ΠΎΡΠΊΠ°? ΠΠ°ΠΊ Π·Π°ΡΠ΅ΠΉΠ»ΠΈΠ²ΠΎ! Π§ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ? ΠΠ²ΡΠ·Π΄ΠΎΡΠΊΠ° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΈΠΏ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ β ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Ρ ΡΠΈΠΏΠΎΠ²-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²; Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΡΠ»ΠΈ Π±Ρ ΠΌΠ½Π΅ Π½Π°Π΄ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» * Π²ΡΠ»ΡΡ (Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ), Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π» Β«Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠ°Β» ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Β«ΡΠΈΠΏΒ».
ΠβΠΊΠ΅ΠΉ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΎΠ² ΡΠΎΡΡ Ρ ΡΠΈΠΏΠ° Maybe:
ghci> :k Maybe
Maybe :: * β> *
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ² Maybe ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Int) ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Maybe Int). ΠΠΎΡ ΠΎ ΡΡΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡ Π½Π°ΠΌ ΡΠΎΡΡ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΈΠΏ Int β> Int ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Int; ΡΠΎΡΡ * β > * ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊ ΡΠΈΠΏΡ Maybe ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ½ ΡΡΠ°Π½Π΅Ρ ΡΠΎΡΡΠ°.
ghci> :k Maybe Int
Maybe Int :: *
Π’Π°ΠΊ Ρ ΠΈ Π΄ΡΠΌΠ°Π»! ΠΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊ ΡΠΈΠΏΡ Maybe ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Ρ (Π½ΠΎ Π½Π΅ ΠΎΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»Π΅Π½ΠΈΠ΅: ΡΠΈΠΏΡ β ΡΡΠΎ Π½Π΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ ΡΠΎΡΡΠ°) Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ :t isUpper ΠΈ :t isUpper 'A'. Π£ ΡΡΠ½ΠΊΡΠΈΠΈ isUpper ΡΠΈΠΏ Char β> Bool; Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ isUpper 'A' ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Bool, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β ΠΏΡΠΎΡΡΠΎ False. Π‘ΠΎΡΡ ΠΎΠ±ΠΎΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, *.
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ :k Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ ΡΠΎΡΡ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ :t Π΄Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ ΡΠΈΠΏ. ΠΡΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΠΈΠΏΡ β ΡΡΠΎ ΠΌΠ΅ΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π° ΡΠΎΡΡΠ° β ΡΡΠΎ ΠΌΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²; ΠΈ Π² ΡΡΠΎΠΌ ΠΎΠ½ΠΈ ΡΡ ΠΎΠΆΠΈ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΡΠ°.
ghci> :k Either
Either :: * β> * β> *
ΠΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏ Either ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠΎ-ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ (ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈΡ .
ghci> :k Either String
Either String :: * β> *
ghci> :k Either String Int
Either String Int :: *
ΠΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠ° Either ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor, ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ»Π°ΡΡ Functor ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΏΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Ρ ΡΠΈΠΏΠ° Either ΠΈΡ Π΄Π²Π°. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠ»Π°ΡΡ Functor ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΏΡ ΡΠΎΡΡΠ° * β> *, ΠΈ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ Either Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΡΡ * β> * ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ° * β> * β> *. ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Functor Π΅ΡΡ ΡΠ°Π·:
class Functor f where
fmap :: (a β> b) β> f a β> f b
ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° f ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΏ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ, ΡΡΠΎ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Β«ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡΡΡΒ» Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ Functor, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡ * β> *.
ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠΌΡΠΌΡΡ ΡΠΈΠΏ-ΡΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΏΠΎΠ²:
class Tofu t where
tofu :: j a β> t a j
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΡΠ°Π½Π½ΠΎ. ΠΠ°ΠΊ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°? ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡΡ ΡΠΈΠΏΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠΏ j a ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ½ΠΊΡΠΈΡ tofu ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Ρ ΡΠΈΠΏΠ° j a Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡΡ *. ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ ΡΠΎΡΡ * Π΄Π»Ρ ΡΠΈΠΏΠ° a ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ²Π΅ΡΡΠΈ, ΡΡΠΎ ΡΠΈΠΏ j Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡΡΠ° * β> *. ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠΈΠΏ t ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΈ ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΡΠΈΠΏΠ°. ΠΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΡΠΈΠΏΠ° a ΡΠΎΡΡ * ΠΈ Ρ ΡΠΈΠΏΠ° j ΡΠΎΡΡ * β> *, ΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠΈΠΏ t Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡΡΠ° * β> (* β> *) β> *. ΠΡΠ°ΠΊ, ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (a) ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ (j), ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΠ°Ρ!
Π₯ΠΎΡΠΎΡΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΠΏ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΡΡΠ°: * β> (* β> *) β> *. ΠΠΎΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
data Frank a b = Frank {frankField :: b a} deriving (Show)
ΠΡΠΊΡΠ΄Π° ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎΡ ΡΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ * β> (* β> *) β > *? ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ Π² Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠΏΠ°Ρ Π΄Π°Π½Π½ΡΡ ΡΠ΄Π΅Π»Π°Π½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡ *. ΠΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ ΡΠΎΡΡ * Π΄Π»Ρ ΡΠΈΠΏΠ° a; ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΈΠΏ b ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅Π³ΠΎ ΡΠΎΡΡ β * β> *. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π½Π°Π΅ΠΌ ΡΠΎΡΡΠ° ΡΠΈΠΏΠΎΠ² a ΠΈ b; ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΈΠΏΠ° Frank, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠΈΠΏ Frank ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ * β> (* β> *) β > *. ΠΠ΅ΡΠ²Π°Ρ * ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΡΡ ΡΠΈΠΏΠ° a; (* β> *) ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΡΡ ΡΠΈΠΏΠ° b. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° Frank ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΈΡ ΡΠΈΠΏΡ.
ghci> :t Frank {frankField = Just "Π₯Π-Π₯Π"}
Frank {frankField = Just "Π₯Π-Π₯Π"} :: Frank [Char] Maybe
ghci> :t Frank {frankField = Node 'a' EmptyTree EmptyTree}
Frank {frankField = Node 'a' EmptyTree EmptyTree} :: Frank Char Tree
ghci> :t Frank {frankField = "ΠΠ"}
Frank {frankField = "ΠΠ"} :: Frank Char []
ΠΠΌ-ΠΌ-ΠΌβ¦ Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ frankField ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Π²ΠΈΠ΄Π° a b, Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏΡ ΠΏΠΎΡ ΠΎΠΆΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Just "Π₯Π-Π₯Π", ΡΠΈΠΏ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ β Maybe [Char], ΠΈΠ»ΠΈ ['Π','Π'] (ΡΠΈΠΏ [Char]; Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎ Π±ΡΠ» Π±Ρ List Char). ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° Frank ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΎΡΡΡ ΡΠΈΠΏΠ° Frank. Π‘ΠΎΡΡ [Char] β ΡΡΠΎ *, ΡΠΈΠΏ Maybe ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ * β> *. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Frank ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ *.
Π‘Π΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠ° Frank ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Tofu Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ tofu ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° a j (ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΎΠΉ ΡΠΎΡΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Maybe Int) ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° t a j. ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΡΠΈΠΏ Frank Π½Π° t, ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ Frank Int Maybe.
instance Tofu Frank where
tofu x = Frank x
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΈΠΏΡ:
ghci> tofu (Just 'a') :: Frank Char Maybe
Frank {frankField = Just 'a'}
ghci> tofu ["ΠΠ ΠΠΠΠ’"] :: Frank [Char] []
Frank {frankField = ["ΠΠ ΠΠΠΠ’"]}
ΠΡΡΡΡ ΠΈ Π±Π΅Π· ΠΎΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·Ρ, Π½ΠΎ ΠΌΡ ΠΏΠΎΡΡΠ΅Π½ΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π°ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ². ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ ΠΈΠ· ΡΠΈΠΏ-ΡΡ. Π£ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ :
data Barry t k p = Barry { yabba :: p, dabba :: t k }
ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Functor. ΠΠ»Π°ΡΡ Functor ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΏΡ ΡΠΎΡΡΠ° * β> *, Π½ΠΎ Π½Π΅ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Ρ ΡΠΈΠΏΠ° Barry ΡΠ°ΠΊΠΎΠΉ ΡΠΎΡΡ. ΠΠ°ΠΊΠΎΠ² ΠΆΠ΅ ΡΠΎΡΡ Ρ ΡΠΈΠΏΠ° Barry? ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ ΡΠΈΠΏΠ°-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΠ°ΠΊ ΡΡΠΎ Π΅Π³ΠΎ ΡΠΎΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π° (Π½Π΅ΡΡΠΎ β> Π½Π΅ΡΡΠΎ β> Π½Π΅ΡΡΠΎ β> *). ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° ΡΠΈΠΏ p β ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ; ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ *. ΠΠ»Ρ ΡΠΈΠΏΠ° k ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ ΡΠΎΡΡ *; ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΈΠΏ t ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ * β> *. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠΌ Π²ΡΡ Π² ΠΎΠ΄Π½Ρ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠΌ, ΡΡΠΎ ΡΠΈΠΏ Barry ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡΡ (* β> *) β> * β> * β> *. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅ GHCi: