module Char

前のエントリでChar モジュールの実装方法でわからない箇所があった。
そうだ ソース、見よう。
ghciでのソースが見当たらなかったので*1hugs のソースを見てみた。

ソース
% view /usr/lib/hugs/packages/hugsbase/Hugs/Char.hs
(略)
-- Character-testing operations (some others are in Hugs.Prelude)
isAscii, isLatprimIntegerToIntin1, isControl :: Char -> Bool

isAscii c                =  c < '\x80'
(略)
-- Character code functions
ord                      :: Char -> Int
ord                      =  fromEnum
(略)
isAscii

私が書いたコードとほぼ同じだけど、下限の判定は入れてないのね。符号なしなのかしらん。

ord

これをどう実装しているのかが知りたかったのだが、見てびっくり。丸投げじゃないですか。
fromEnum を追うと、primIntegerToInt を呼び出している。prim〜 って、primitive な関数ってことだよね。ここまでくると Haskell で書かれていなさそう。

*1:コンパイラ型の処理系なので、ないのは当然か