morris555's diary

高校生のブログです。

fromEnumについて

Twitterで流れてきたこれを見て、あれ?と思ったので調べてみました

fromEnum???

数字ならその数字を、文字なら、文字コードを返すらしい。

ghciで調べてみる

Prelude> :t fromEnum 
fromEnum :: Enum a => a -> Int

なるほど

列挙型ならいいのか

というわけで、ちょっと試しに

Prelude> data Num = Zero | One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten deriving (Enum , Show)
Prelude> fromEnum One 
1
Prelude> fromEnum Nine
9

この場合はインデックスを返すらしい(?)

という事は

Prelude> :i Bool 
data Bool = False | True        -- Defined in `GHC.Types'

Prelude> fromEnum (1==1)
1
Prelude> fromEnum (1==2)
0

これだけの事だったのか。

ちなみに…

数列表記も列挙型ならいいらしいので

Prelude> data Num = Zero | One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten deriving (Enum , Show)
Prelude> [Zero .. Ten]
[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten]
Prelude> [Zero, Two ..]
[Zero,Two,Four,Six,Eight,Ten]

こんなことも出来ちゃうみたいです。