web-dev-qa-db-ja.com

Haskellで文字のASCII値を取得する方法は?

Haskellで文字のASCII値を取得する方法は?私が読んだものに基づいて、GHCiでord関数を使用しようとしました ここ =エラーメッセージのバグ:

範囲外:「ord」

例えば:

GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> ord 'a'

<interactive>:1:0: Not in scope: `ord'
Prelude>

私は何が間違っているのですか?

24
Chris

Travis Brown コメントに示されているように、モジュールからord関数をインポートする必要があります Data.Char

import Data.Char (ord)

main = print (ord 'a')

デフォルトでは Prelude モジュールのみがロードされ、他のすべてのモジュールは明示的にインポートする必要があります。

26
sth

fromEnumを使用することもできます。 (プレリュードのEnumクラスで定義されています。)

Prelude> :i Char
data Char = GHC.Types.C# GHC.Prim.Char#     -- Defined in `GHC.Types'
instance Enum Char -- Defined in `GHC.Enum'
instance Eq Char -- Defined in `GHC.Classes'
...

したがって、fromEnumtoEnumを使用できます。これは、Int値としてASCIIコードを使用します。

Prelude> fromEnum 'A'
65
Prelude> fromEnum 'a'
97
Prelude> toEnum 9 :: Char
'\t'
Prelude> toEnum 100 :: Char
'd'
12
RnMss