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

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

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

ghci> "Абракадабра" < "Π—Π΅Π±Ρ€Π°"

True

ghci> "Абракадабра" `compare` "Π—Π΅Π±Ρ€Π°"

LT

ghci> 5 >= 2

True

ghci> 5 `compare` 3

GT

Класс Show

ЗначСния, Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами класса Ρ‚ΠΈΠΏΠΎΠ² Show, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны ΠΊΠ°ΠΊ строки. ВсС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π²ΡˆΠΈΠ΅ΡΡ Π΄ΠΎ сих ΠΏΠΎΡ€ Ρ‚ΠΈΠΏΡ‹ (ΠΊΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами Show. НаиболСС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ функция Π² классС Ρ‚ΠΈΠΏΠΎΠ² Show – это, собствСнно, функция show. Она Π±Π΅Ρ€Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, для Ρ‚ΠΈΠΏΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ экзСмпляр класса Show, ΠΈ прСдставляСт Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ строки.

ghci> show 3

"3"

ghci> show 5.334

"5.334"

ghci> show True

"True"

Класс Read

Класс Read – это Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ классу Ρ‚ΠΈΠΏΠΎΠ² Show. Ѐункция read ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся экзСмпляром класса Read.

ghci> read "True" || False

True

ghci> read "8.2" + 3.8

12.0

ghci> read "5" – 2

3

ghci> read "[1,2,3,4]" ++ [3]

[1,2,3,4,3]

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ. Но Ρ‡Ρ‚ΠΎ случится, Ссли ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ read "4"?

ghci> read "4"

<interactive>:1:0:

    Ambiguous type variable `a' in the constraint:

     `Read a' arising from a use of `read' at <interactive>:1:0–7

    Probable fix: add a type signature that fixes these type variable(s)

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ GHCi пытаСтся Π½Π°ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅: Π²ΠΎ врСмя ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ read ΠΌΡ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π»ΠΈ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ GHCi ΠΌΠΎΠ³ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ read ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Когда ΠΌΡ‹ использовали Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ»Π΅Π²ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, GHCi Β«ΠΏΠΎΠ½ΠΈΠΌΠ°Π»Β», Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Bool. А Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π½Π΅ΠΊΠΈΠΉ Ρ‚ΠΈΠΏ, входящий Π² класс Read, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° сигнатуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ read.

ghci> :t read

read :: (Read a) => String –> a

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ String – Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° [Char]. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ String ΠΈ [Char] ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ взаимозамСняСмо, Π½ΠΎ Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ String, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

Π’ΠΈΠ΄ΠΈΡ‚Π΅? Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ экзСмпляр класса Read, Π½ΠΎ Ссли ΠΌΡ‹ Π½Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, Ρ‚ΠΎ Ρƒ компилятора Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ способа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ это Ρ‚ΠΈΠΏ. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ явныС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°. Аннотации Ρ‚ΠΈΠΏΠ° – способ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ добавлСния символов :: Π² ΠΊΠΎΠ½Π΅Ρ† выраТСния ΠΈ указания Ρ‚ΠΈΠΏΠ°. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅:

ghci> read "5" :: Int

5

ghci> read "5" :: Float

5.0

ghci> (read "5" :: Float) * 4

20.0

ghci> read "[1,2,3,4]" :: [Int]

[1,2,3,4]

ghci> read "(3, 'a')" :: (Int, Char)

(3, 'a')

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти Ρ‚ΠΈΠΏ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Но ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Int ΠΈΠ»ΠΈ Float для выраТСния Π²Ρ€ΠΎΠ΄Π΅ read "5". Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρƒ Π½Π΅Π³ΠΎ Ρ‚ΠΈΠΏ, язык Haskell Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹ фактичСски Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ read "5".

Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Haskell – статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ всС Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ скомпилируСтся ΠΊΠΎΠ΄ (ΠΈΠ»ΠΈ, Π² случаС GHCi, вычислится). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ языку: Β«Π­ΠΉ, это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ, Ссли Ρ‚Ρ‹ сам случайно Π½Π΅ понял!Β»

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ компилятору достаточно ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ функция read. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ read помСщаСтся Π² список, Ρ‚ΠΎ Haskell ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ списка, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ благодаря Π½Π°Π»ΠΈΡ‡ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов списка:

ghci> [read "True" , False, True, False]

[True, False, True, False]

Π’Π°ΠΊ ΠΊΠ°ΠΊ read "True" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ элСмСнт списка Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Haskell ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ опрСдСляСт, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ read "True" Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Bool.

Класс Enum

ЭкзСмплярами класса Enum ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ упорядочСнныС Ρ‚ΠΈΠΏΡ‹; ΠΈΡ… значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Ρ‚ΡŒ. ОсновноС прСимущСство класса Ρ‚ΠΈΠΏΠΎΠ² Enum Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΡ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°Ρ… списков. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ succ ΠΈ pred. Π’ΠΈΠΏΡ‹, входящиС Π² этот класс: (), Bool, Char, Ordering, Int, Integer, Float ΠΈ Double.

ghci> ['a'..'e']

"abcde"

ghci> [LT .. GT]

[LT,EQ,GT]

ghci> [3 .. 5]

[3,4,5]

ghci>succ 'B'

'C'

Класс Bounded

ЭкзСмпляры класса Ρ‚ΠΈΠΏΠΎΠ² Bounded ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ ΠΈ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ.

ghci> minBound :: Int

–2147483648

ghci> maxBound :: Char

'\1114111'

ghci> maxBound :: Bool

True

ghci> minBound :: Bool

False

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ minBound ΠΈ maxBound интСрСсны Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ (Bounded a) => a. Π’ этом смыслС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ константами.

ВсС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ класса Bounded, Ссли ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ классу Bounded.

ghci> maxBound :: (Bool, Int, Char)

(True,2147483647,'\1114111')

Класс Num

Класс Num – это класс Ρ‚ΠΈΠΏΠΎΠ² для чисСл. Π•Π³ΠΎ экзСмпляры ΠΌΠΎΠ³ΡƒΡ‚ вСсти сСбя ΠΊΠ°ΠΊ числа. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚ΠΈΠΏ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ числа:

ghci> :t 20

20 :: (Num t) => t

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ всС числа Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ константами. Они ΠΌΠΎΠ³ΡƒΡ‚ вСсти сСбя ΠΊΠ°ΠΊ любой Ρ‚ΠΈΠΏ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ экзСмпляром класса Num (Int, Integer, Float ΠΈΠ»ΠΈ Double).

ghci> 20 :: Int

20

ghci> 20 :: Integer

20

ghci> 20 :: Float

20.0

ghci> 20 :: Double

20.0

Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° *, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ числа.

ghci> :t (*)

(*) :: (Num a) => a –> a –> a

Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° числа ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число этого ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. ИмСнно поэтому (5 :: Int) * (6 :: Integer) ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС, Π° 5 * (6 :: Integer) Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Integer ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ 5 ΠΌΠΎΠΆΠ΅Ρ‚ вСсти сСбя ΠΈ ΠΊΠ°ΠΊ Integer, ΠΈ ΠΊΠ°ΠΊ Int.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ классу Num, Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Β«ΠΏΠΎΠ΄Ρ€ΡƒΠΆΠΈΡ‚ΡŒΡΡΒ» с классами Show ΠΈ Eq.

Класс Floating

Класс Floating Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Float ΠΈ Double.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ экзСмплярами класса Floating, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти значСния ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ прСдставлСны Π² Π²ΠΈΠ΄Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ для выполнСния осмыслСнных вычислСний. НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sin, cos ΠΈ sqrt.

Класс Integral

Класс Integral – Ρ‚ΠΎΠΆΠ΅ числовой класс Ρ‚ΠΈΠΏΠΎΠ². Если класс Num Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС Ρ‚ΠΈΠΏΡ‹, Π² Ρ‚ΠΎΠΌ числС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Ρ†Π΅Π»Ρ‹Π΅ числа, Ρ‚ΠΎ Π² класс Integral входят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа. Для Ρ‚ΠΈΠΏΠΎΠ² Int ΠΈ Integer ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ экзСмпляры Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с числами являСтся fromIntegral. Π’ΠΎΡ‚ Π΅Ρ‘ объявлСниС Ρ‚ΠΈΠΏΠ°:

fromIntegral :: (Num b, Integral a) => a –> b

Из этой сигнатуры ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число (Integral) ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅Π΅ число (Num).

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•. НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция fromIntegral ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ классов Π² своСй сигнатурС. Π’Π°ΠΊΠΎΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ допустимо – нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

Π­Ρ‚ΠΎ окаТСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° потрСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠΎΠ³Π»ΠΈ Β«ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΡΡΒ» вмСстС. НапримСр, функция вычислСния Π΄Π»ΠΈΠ½Ρ‹ length ΠΈΠΌΠ΅Π΅Ρ‚ объявлСниС length :: [a] –> Int, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ (Num b) => length :: [a] –> b. (НавСрноС, Ρ‚Π°ΠΊ слоТилось историчСски – хотя, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡƒ, ΠΊΠ°ΠΊΠΎΠ²Π° Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π»Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, это довольно Π³Π»ΡƒΠΏΠΎ.) Π’ любом случаС, Ссли ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ списка ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΉ 3.2, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ значСния Ρ‚ΠΈΠΏΠ° Int ΠΈ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fromIntegral:

ghci> fromIntegral (length [1,2,3,4]) + 3.2

7.2

НСсколько Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… слов ΠΎ классах Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс Ρ‚ΠΈΠΏΠ° опрСдСляСт абстрактный интСрфСйс, ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ экзСмпляры для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов, Π° для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ экзСмпляры Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Ρ‚ΠΈΠΏ Char ΠΈΠΌΠ΅Π΅Ρ‚ экзСмпляры для ΠΌΠ½ΠΎΠ³ΠΈΡ… классов, Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… – Eq ΠΈ Ord, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ символы Π½Π° равСнство ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΈΡ… Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС.