System.Random 解読シリーズ
モジュールのエクスポートリストの後は、外部モジュールのインポートリストが続く。System.Random のソースファイルの場合は次のようになっている。インポートされたモジュールは System.Random の内部処理で使われるので、Haddock には表示されない。 import Prelude import Data.Int #ifdef __NHC__ import CPUTime( getCPUTime ) import Foreign.Ptr ( Ptr, nullPtr ) import Foreign.C( CTime, CUInt ) #else import System.CPUTime( getCPUTime ) import System.Time( getClockTime, ClockTime(..) ) #endif import Data.Char( isSpace, chr, ord ) import System.IO.Unsafe ( unsafePerformIO ) import Data.IORef import Numeric( readDec ) #ifdef や #else はコンパイラのプリプロセッサへの指示を行うプラグマである。意味は gcc の場合と同じようだ。__NHC__ フラグ立っている場合はコンパイラが nhc98 の場合だ。nhc98 コンパイラは Unix プラットフォームのコンパイラで、メモリ使用量の少ない小さいオブジェクトコードを生成する。 Prelude モジュールは Haskell の標準的なモジュールで全てのモジュールにデフォールトでインポートされる。上の例のように明示的にインポートしてもいいし、明示的なインポートがなくても暗黙のうちにインポートされる。 Data.Int モジュールは整数型を定めている。Data.Int 型で data 宣言されている整数型は Int, Int8, Int32, Int64 でいずれも符号付きの2進数の整数だ。これらのデータ型は、Bounded, Enum, Eq, Integral, ... などの数多くの型クラスのインスタンスになっている。 System.CPUTime モジュールでは getCPUTime 関数のみをインポートしている。getCPUTime 関数は picosecond 単位で CPU タイムを取得する。 System.Time モジュールからは getClockTime 関数と ClockTime 型をインポートする。ClockTime(..) の (..) は ClockTime 型のフィールドもインポートすることを示している。getClockTime 関数は現在のシステムの時刻を取得し IO ClockTime 型で返す。ClockTime 型のコンストラクタは Tod で Tod Integer Integer のように Integer 型のフィールドを2つ持っている。 Data.Char モジュールからは isSpace 関数と chr 関数、ord 関数をインポートする。isSpace はキャラクターが空白文字であるかを判断し、chr 関数は整数をASCIIコードに変換し、ord 関数はASCIIコードを整数に変換する。 System.IO.Unsafe モジュールからは unsafePerformIO 関数をインポートする。unsafePerformIO 関数の型は unsafePerformIO :: IO a -> a で IO モナドにバックドアをつける働きがあるらしいが詳しくは調べなかった。 Data.IORef モジュールはIOモナドの中に代入可能な変数を導入するモジュールだ。 Numeric モジュールからは readDec 関数がインポートされる。readDec 関数は文字列を10進数として読み取って整数型の値を得る。 乱数発生というような単純明快な動作のモジュールも unsafePerformIO などがインポートされていると怪しさを感じてしまう。
by tnomura9
| 2015-02-16 18:13
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||