۶ - ۹تایپکلاس Enum

این تایپکلاس کمی با تایپکلاس ‏‎Ord‎‏ فرق داره. تایپکلاس ‏‎Enum‎‏ شامل تایپ‌هایی میشه که قابل شمارش باشن، به عبارت دیگه مقادیر قبلی و بعدی‌شون مشخص‌ه. تا الان حتماً یاد گرفتین چطور اطلاعات رو استعلام و ازشون استفاده کنین:

Prelude> :info Enum
class Enum a where
  succ :: a -> a
  pred :: a -> a
  toEnum :: Int -> a
  fromEnum :: a -> Int
  enumFrom :: a -> [a]
  enumFromThen :: a -> a -> [a]
  enumFromTo :: a -> a -> [a]
  enumFromThenTo :: a -> a -> [a]

instance Enum Ordering
instance Enum Integer
instance Enum Int
instance Enum Char
instance Enum Bool
instance Enum ()
instance Enum Float
instance Enum Double

اعداد و کاراکترها همگی مقادیرِ قبلی و بعدی‌شون مشخص‌اند:

Prelude> succ 4
5
Prelude> pred 'd'
'c'
Prelude> succ 4.5
5.5

ممکنه متوجه شده باشین که بعضی از اون توابع، خروجی با تایپِ لیست برمی‌گردونن. این توابع یه مقدار اولیه رو می‌گیرن و با مقادیر پَسین ِ اون تایپ، یه لیست می‌سازن:

Prelude> enumFromTo 3 8
[3,4,5,6,7,8]
Prelude> enumFromTo 'a' 'f'
"abcdef"

یه نگاه مختصر هم به ‏‎enumFromThenTo‎‏ میندازیم:

Prelude> enumFromThenTo 1 10 100
[1,10,19,28,37,46,55,64,73,82,91,100]

با نگاه به لیستِ خروجی، آیا می‌تونین بگین این تابع چه کاری انجام میده؟ اگه مقادیرِ ‏‎0 10 100‎‏ رو بهش بدیم چه جوابی می‌گیریم؟ آرگومان‌های ‏‎'a' 'c' 'z'‎‏ چطور؟