ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ 3
Π― Π·Π°Π΄ΡΠΌΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 10. ΠΠ°ΠΊΠΎΠ΅?
10
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ!
Π― Π·Π°Π΄ΡΠΌΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 10. ΠΠ°ΠΊΠΎΠ΅?
2
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ 4
Π― Π·Π°Π΄ΡΠΌΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 10. ΠΠ°ΠΊΠΎΠ΅?
5
ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ 10
Π― Π·Π°Π΄ΡΠΌΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 10. ΠΠ°ΠΊΠΎΠ΅?
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ:
import System.Random
import Control.Monad (when)
main = do
gen <- getStdGen
let (randNumber, _) = randomR (1,10) gen :: (Int, StdGen)
putStr "Π― Π·Π°Π΄ΡΠΌΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΎΡ 1 Π΄ΠΎ 10. ΠΠ°ΠΊΠΎΠ΅? "
numberString <- getLine
when (not $ null numberString) $ do
let number = read numberString
if randNumber == number
then putStrLn "ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ!"
else putStrLn $ "ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ "
++ show randNumber
newStdGen
main
ΠΡΠ° Π²Π΅ΡΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΡΡ, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌΠ° ΡΠ΅Π±Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Ρ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ main. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΡΠ²Π΅Ρ, ΡΠ³Π°Π΄Π°Π» Π»ΠΈ ΠΎΠ½ ΡΠΈΡΠ»ΠΎ, ΠΌΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈ ΡΠ½ΠΎΠ²Π° Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ main. ΠΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ ΠΎΡΠΎΡΠΈ, Π½ΠΎ ΠΌΠ½Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ±, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² ΡΡΠ½ΠΊΡΠΈΠΈ main ΠΈ Π΄Π°ΡΡ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ.
Bytestring: ΡΠΎΡ ΠΆΠ΅ String, Π½ΠΎ Π±ΡΡΡΡΠ΅Π΅
Π‘ΠΏΠΈΡΠΎΠΊ β ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΏΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠΈ ΡΡΠΎ Π²Π΅Π·Π΄Π΅. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ, ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎΡΡΡ ΡΠ·ΡΠΊΠ° Haskell ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΊΠ»Ρ ΡΠΈΠΏΠ° for ΠΈ while ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ (ΠΈ Π΄Π°ΠΆΠ΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²!) Π΄Π»Ρ Π½Π°Ρ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΠΏΠΈΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΈΡΠ°Π΅ΠΌ Π»ΠΈ ΠΌΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» ΠΈ ΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΡ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ. ΠΠ°ΠΊ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΠΈΠΏ String β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° [Char]. Π£ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠΈΠΌΠ²ΠΎΠ»Π° Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ Unicode ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡΠΎΠ². ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠΏΠΈΡΠΎΠΊ β Π»Π΅Π½ΠΈΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΎΠΊ [1,2,3,4], ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΏΠΈΡΠΎΠΊ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, β ΡΡΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ [1,2,3,4] β ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Ρ Π°Ρ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ 1:2:3:4:[]. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΠΈΡΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π½Π° ΡΠΊΡΠ°Π½), ΠΎΡΡΠ°ΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠ° 2:3:4:[] ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Β«ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°Β», ΠΈ Ρ. Π΄. Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ±Π΅ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ, ΠΏΡΠΈΡΡΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ»Π°Π³Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΌΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΡΠΈΡΠ΅Π» ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉ β Π½Π΅ ΡΠ°ΠΌΠ°Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡ Π½Π° ΡΠ²Π΅ΡΠ΅!
ΠΡΠ΅ ΡΡΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Ρ Π½Π΅ Π²ΠΎΠ»Π½ΡΡΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠΌΠΈ ΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΠΌΠ΅Ρ ΠΎΠΉ. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π² ΡΠ·ΡΠΊΠ΅ Haskell Π΅ΡΡΡ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ. ΠΠ½ΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠΏΠΈΡΠΊΠΈ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ. Π’Π°ΠΊΠΆΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π»Π΅Π½ΠΈΠ²ΠΎΡΡΡ.
Π‘ΡΡΠΎΠ³ΠΈΠ΅ ΠΈ Π»Π΅Π½ΠΈΠ²ΡΠ΅
ΠΠ°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ Π²ΠΈΠ΄ΠΎΠ²: ΡΡΡΠΎΠ³ΠΈΠ΅ ΠΈ Π»Π΅Π½ΠΈΠ²ΡΠ΅. Π‘ΡΡΠΎΠ³ΠΈΠ΅ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Data.ByteString, ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ Π»Π΅Π½ΠΈΠ²ΡΠ΅. ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Β«ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉΒ», ΡΡΡΠΎΠ³Π°Ρ ΡΡΡΠΎΠΊΠ° Π±Π°ΠΉΡΠΎΠ² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π°ΠΉΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ ΠΈΠ· ΡΡΡΠΎΠ³ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π΅Ρ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΠΌΠ΅Π½ΡΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Β«ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡΒ». ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΡΠ°ΠΊΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ.
ΠΡΠΎΡΠΎΠΉ Π²ΠΈΠ΄ Π±Π°ΠΉΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Data.ByteString. Lazy. ΠΠ½ΠΈ Π»Π΅Π½ΠΈΠ²Ρ β Π½ΠΎ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΊΠΈ. ΠΠ°ΠΊ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅, Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ Β«ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉΒ», ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π»Π΅ΠΉ. ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄: ΠΎΠ½ΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 64 ΠΠ±. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΠ΅ Π±Π°ΠΉΡ Π² Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π±Π°ΠΉΡΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (ΠΏΠ΅ΡΠ°ΡΠ°Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ), ΡΠΎ Π±ΡΠ΄ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Ρ ΠΏΠ΅ΡΠ²ΡΠ΅ 64 ΠΠ±. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·ΡΠ°ΡΠ΅Π½ΠΎ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ. ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠ³ΠΈΡ Π±Π°ΠΉΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 64 ΠΠ±. ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ°ΠΉΠ»Π° Π»Π΅Π½ΠΈΠ²ΡΠΌΠΈ Π±Π°ΠΉΡΠΎΠ²ΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π±Π»ΠΎΠΊ Π·Π° Π±Π»ΠΎΠΊΠΎΠΌ. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΠΊΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ 64 ΠΠ±, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π²Π»Π΅Π·Π΅Ρ Π² L2 β ΠΊΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»Ρ Data.ByteString. Lazy, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Data.List, ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ ΡΠΈΠΏ ByteString Π²ΠΌΠ΅ΡΡΠΎ [a] ΠΈ Word8 Π²ΠΌΠ΅ΡΡΠΎ a. Π€ΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° ByteString ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΡΠ½ΡΠ½Π½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ Π² ΡΠΊΡΠΈΠΏΡΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ GHCi Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠΈΠΏΠΎΠΌ ByteString.
import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString as S
ΠΠΎΠ΄ΡΠ»Ρ B ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠ΄ΡΠ»Ρ S β ΡΡΡΠΎΠ³ΠΈΠ΅. ΠΠ»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ Π²Π΅ΡΡΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ pack ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠ³Π½Π°ΡΡΡΡ pack :: [Word8] β> ByteString. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΡΠΈΠΏΠ° Word8 ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ByteString. ΠΠΎΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ, Π±ΡΠ΄ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π»Π΅Π½ΠΈΠ²ΡΠΌ, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ Π»Π΅Π½ΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ 64 ΠΠ±.
Π§ΡΠΎ Π·Π° ΡΠΈΠΏ Word8? ΠΠ½ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Int, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ 0 β 255. Π’ΠΈΠΏ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΠΎΡΡΠΌΠΈ Π±ΠΈΡΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Int, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Num. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΈΡΠ»ΠΎ 5 ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΠΎ, Π° Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠΉ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΠΏ. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ β ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΏ Word8.
ghci> B.pack [99,97,110]
Chunk "can" Empty
ghci> B.pack [98..120]
Chunk "bcdefghijklmnopqrstuvwx" Empty
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, Word8 Π½Π΅ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Ρ Π»ΠΎΠΏΠΎΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΠΈΡΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ ΠΊ Π½Π΅ΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 336, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° Word8, ΡΠΈΡΠ»ΠΎ Π±ΡΠ΄Π΅Ρ Π²Π·ΡΡΠΎ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 256, ΡΠΎ Π΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡΡ 80.
ΠΡ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΠΈΠΏ ByteString; ΠΎΠ½ΠΈ ΡΠΌΠ΅ΡΡΠΈΠ»ΠΈΡΡ Π² ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Empty β ΡΡΠΎ Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ [] Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠΎΠ².
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π±Π°ΠΉΡΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π±Π°ΠΉΡ Π·Π° Π±Π°ΠΉΡΠΎΠΌ, Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ unpack ΠΎΠ±ΡΠ°ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ pack. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Π±Π°ΠΉΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ². ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
ghci> let by = B.pack [98,111,114,116]
ghci> by
Chunk "bort" Empty
ghci> B.unpack by
[98,111,114,116]
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΡΡΠΎΠ³ΠΈΡ Π² Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π€ΡΠ½ΠΊΡΠΈΡ fromChunks ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠ³ΠΈΡ ΡΡΡΠΎΠΊ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ Π² Π»Π΅Π½ΠΈΠ²ΡΡ ΡΡΡΠΎΠΊΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ toChunks ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»Π΅Π½ΠΈΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π±Π°ΠΉΡΠΎΠ² ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π΅Ρ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠ³ΠΈΡ ΡΡΡΠΎΠΊ.
ghci> B.fromChunks [S.pack [40,41,42], S.pack [43,44,45], S.pack [46,47,48]]
Chunk "()*" (Chunk "+,β" (Chunk "./0" Empty))
ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΡΡΡΠΎΠ³ΠΈΡ ΡΡΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΡ , Π½Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΎΠ΄Π½Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΡΡΠΎΠ³ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠ½Π°Π»ΠΎΠ³ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° : Π΄Π»Ρ ΡΡΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ cons. ΠΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±Π°ΠΉΡ ΠΈ ΡΡΡΠΎΠΊΡ Π±Π°ΠΉΡΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π±Π°ΠΉΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈ.
ghci> B.cons 85 $ B.pack [80,81,82,84]
Chunk "U" (Chunk "PQRT" Empty)
ΠΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π±Π°ΠΉΡΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Data.List, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ (Π½ΠΎ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡ ΠΈΠΌΠΈ): head, tail, init, null, length, map, reverse, foldl, foldr, concat, takeWhile, filter ΠΈ Π΄Ρ.
ΠΡΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ System.IO, ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ½ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° ByteString. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ readFile Π² ΠΌΠΎΠ΄ΡΠ»Π΅ System.IO ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ