module Char
前のエントリでChar モジュールの実装方法でわからない箇所があった。
そうだ ソース、見よう。
ghciでのソースが見当たらなかったので*1、hugs のソースを見てみた。
ソース
% 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 で書かれていなさそう。