栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン6.12.3
The GHC Team
目次
-
The Glasgow Haskell Compiler License
-
-
1. 参考訳
-
1. GHCの紹介
-
-
1.1. GHCを入手する
-
1.2. メタ情報: ウェブサイト、メーリングリストなど
-
1.3. GHCのバグを報告する
-
1.4. GHCのバージョン番号付け規則
-
1.5. Release notes for version 6.12.3
-
-
1.5.1. Compiler and Runtime system
-
1.5.2. Libraries
-
-
1.5.2.1. array
-
1.5.2.2. base
-
1.5.2.3. bytestring
-
1.5.2.4. Cabal
-
1.5.2.5. containers
-
1.5.2.6. directory
-
1.5.2.7.
dph
(dph-base, dph-par, dph-prim-interface, dph-prim-par,
dph-prim-seq, dph-seq)
-
1.5.2.8. extensible-exceptions
-
1.5.2.9. filepath
-
1.5.2.10. ghc-binary
-
1.5.2.11. ghc-prim
-
1.5.2.12. haskell98
-
1.5.2.13. hpc
-
1.5.2.14. integer-gmp
-
1.5.2.15. integer-simple
-
1.5.2.16. old-locale
-
1.5.2.17. old-time
-
1.5.2.18. pretty
-
1.5.2.19. process
-
1.5.2.20. random
-
1.5.2.21. syb
-
1.5.2.22. template-haskell
-
1.5.2.23. time
-
1.5.2.24. unix
-
1.5.2.25. Win32
-
1.6. Release notes for version 6.12.2
-
-
1.6.1. Compiler and Runtime system
-
1.6.2. Template Haskell
-
1.6.3. Libraries
-
-
1.6.3.1. array
-
1.6.3.2. base
-
1.6.3.3. bytestring
-
1.6.3.4. Cabal
-
1.6.3.5. containers
-
1.6.3.6. directory
-
1.6.3.7.
dph
(dph-base, dph-par, dph-prim-interface, dph-prim-par,
dph-prim-seq, dph-seq)
-
1.6.3.8. extensible-exceptions
-
1.6.3.9. filepath
-
1.6.3.10. ghc-binary
-
1.6.3.11. ghc-prim
-
1.6.3.12. haskell98
-
1.6.3.13. hpc
-
1.6.3.14. integer-gmp
-
1.6.3.15. integer-simple
-
1.6.3.16. old-locale
-
1.6.3.17. old-time
-
1.6.3.18. pretty
-
1.6.3.19. process
-
1.6.3.20. random
-
1.6.3.21. syb
-
1.6.3.22. template-haskell
-
1.6.3.23. time
-
1.6.3.24. unix
-
1.6.3.25. Win32
-
1.7. Release notes for version 6.12.1
-
-
1.7.1. Highlights
-
1.7.2. Language changes
-
1.7.3. Warnings
-
1.7.4. Runtime system
-
1.7.5. Build system
-
1.7.6. Compiler
-
1.7.7. GHCi
-
1.7.8. Template Haskell
-
1.7.9. Package Handling
-
1.7.10. Libraries
-
-
1.7.10.1. array
-
1.7.10.2. base
-
1.7.10.3. bytestring
-
1.7.10.4. Cabal
-
1.7.10.5. containers
-
1.7.10.6. directory
-
1.7.10.7.
dph
(dph-base, dph-par, dph-prim-interface, dph-prim-par,
dph-prim-seq, dph-seq)
-
1.7.10.8. extensible-exceptions
-
1.7.10.9. filepath
-
1.7.10.10. ghc-binary
-
1.7.10.11. ghc-prim
-
1.7.10.12. haskell98
-
1.7.10.13. hpc
-
1.7.10.14. integer-gmp
-
1.7.10.15. integer-simple
-
1.7.10.16. old-locale
-
1.7.10.17. old-time
-
1.7.10.18. packedstring
-
1.7.10.19. pretty
-
1.7.10.20. process
-
1.7.10.21. random
-
1.7.10.22. syb
-
1.7.10.23. template-haskell
-
1.7.10.24. time
-
1.7.10.25. unix
-
1.7.10.26. Win32
-
2. GHCiを使う
-
-
2.1. GHCiの紹介
-
2.2. ソースファイルをロードする
-
-
2.2.1. モジュールとファイル名
-
2.2.2. ソースコードの変更と再コンパイル
-
2.3. コンパイル済みコードをロードする
-
2.4. プロンプトで対話的に評価する
-
-
2.4.1. I/O動作とプロンプト
-
2.4.2. プロンプトで
do
記法を使う
-
2.4.3. プロンプトで実際にスコープにあるのは何か
-
-
2.4.3.1.
:module
と:load
-
2.4.3.2. 修飾名
-
2.4.3.3.
:main
コマンドと:run
コマンド
-
2.4.4.
it
という変数
-
2.4.5. GHCiにおける型のデフォルト化
-
2.5. GHCiデバッガ
-
-
2.5.1. ブレークポイントと変数内容の表示
-
-
2.5.1.1. ブレークポイントを設定する
-
2.5.1.2. ブレークポイントを一覧・削除する
-
2.5.2. ステップ実行
-
2.5.3. ブレークポイントのネスト
-
2.5.4.
_result
という変数
-
2.5.5. 追跡と履歴
-
2.5.6. 例外をデバッグする
-
2.5.7. 例: 関数を調べる
-
2.5.8. 制約
-
2.6. GHCiを起動する
-
-
2.6.1. パッケージ
-
2.6.2. 追加のライブラリ
-
2.7. GHCiのコマンド群
-
2.8.
:set
コマンド
-
-
2.8.1. GHCiオプション
-
2.8.2. GHCiからGHCのコマンド行オプションを設定する
-
2.9.
.ghci
ファイル
-
2.10. GHCi内でオブジェクトコードにコンパイルする
-
2.11. FAQと注意事項
-
3. runghcを使う
-
-
3.1. フラグ
-
4. GHCを使う
-
-
4.1. オプション概観
-
-
4.1.1. コマンド行引数
-
4.1.2. ソースファイル中のコマンド行オプション
-
4.1.3. GHCiからオプションを設定する
-
4.2. 静的オプション、動的オプション、モード指定オプション
-
4.3. 意味を持つファイル接尾辞
-
4.4. 実行モード
-
-
4.4.1. ghc
––make
を使う
-
4.4.2. 式評価モード
-
4.4.3. 一括処理コンパイラモード
-
-
4.4.3.1. ファイルに対するデフォルトの振る舞いを上書きする
-
4.5. ヘルプと多弁さに関するオプション
-
4.6. ファイル名と分割コンパイル
-
-
4.6.1. Haskellソースファイル
-
4.6.2. 出力ファイル
-
4.6.3. 探索パス
-
4.6.4. コンパイルの出力先を変える
-
4.6.5. 中間ファイルをそのままにする
-
4.6.6. 一時ファイルの場所を変更する
-
4.6.7. インタフェースファイルに関連するその他のオプション
-
4.6.8. 再コンパイル検査器
-
4.6.9. 相互再帰的なモジュールをコンパイルするには
-
4.6.10. makeを使う
-
4.6.11. 依存関係を生成する
-
4.6.12. 孤立モジュールと孤立インスタンス宣言
-
4.7. 警告と正気度チェックのためのオプション
-
4.8.
パッケージ
-
-
4.8.1. パッケージを使う
-
4.8.2. mainパッケージ
-
4.8.3. パッケージを使うことのHaskell言語への影響
-
4.8.4. パッケージデータベース
-
-
4.8.4.1.
GHC_PACKAGE_PATH
環境変数
-
4.8.5. パッケージID、依存関係、壊れたパッケージ
-
4.8.6. パッケージ管理(
ghc-pkg
コマンド)
-
4.8.7. Haskellソースからパッケージをビルドする
-
4.8.8.
InstalledPackageInfo
: パッケージの仕様
-
4.9. 最適化(コードの改善)
-
-
4.9.1.
-O*
: 便利な最適化フラグの「詰め合わせ」。
-
4.9.2.
-f*
: プラットフォーム非依存のフラグ
-
4.10. 特定の段階に関するオプション
-
-
4.10.1. それぞれの段階で使われるプログラムを変更する
-
4.10.2. 特定の段階にオプションを強制する
-
4.10.3. Cプリプロセッサに影響するオプション
-
-
4.10.3.1. CPPと文字列間隙
-
4.10.4. Haskell前処理器に影響するオプション
-
4.10.5. コード生成に影響するオプション
-
4.10.6. リンクに影響するオプション
-
4.11. 共有ライブラリを使う
-
-
4.11.1. 共有ライブラリを使うようにプログラムをビルドする
-
4.11.2. Haskellパッケージの共有ライブラリ
-
4.11.3. CのAPIをエクスポートする共有ライブラリ
-
4.11.4. 実行時における共有ライブラリの発見
-
4.12. Concurrent Haskellを使う
-
4.13. SMP並列計算を使う
-
-
4.13.1. SMP並列計算に関するコンパイル時オプション
-
4.13.2. SMP並列性のためのRTSオプション
-
4.13.3. SMP並列計算を使うにあたってのヒント
-
4.14. プラットフォーム固有のフラグ
-
4.15. コンパイル済みプログラムを実行する
-
-
4.15.1. 大域的なRTSオプションを設定する
-
4.15.2. いろいろなRTSオプション
-
4.15.3. ガベッジコレクタを制御するためのRTSオプション
-
4.15.4. 並行性と並列性に関するRTSオプション
-
4.15.5. プロファイルに関するRTSオプション
-
4.15.6. 追跡情報を得る
-
4.15.7. ハックする者、デバッグする者、及び好奇心過剰な魂のためのRTSオプション
-
4.15.8. RTSの振る舞いを変更するためのフック
-
4.15.9. RTSに関する情報を取得する
-
4.16. 外部コアファイルを生成・コンパイルする
-
4.17. コンパイラをデバッグする
-
-
4.17.1. コンパイラの中間構造を出力する
-
4.17.2. 整合性の検査
-
4.17.3. コア構文(
-ddump
系フラグ由来の)の読み方
-
4.17.4. 非レジスタ化コンパイル
-
4.18. フラグ早見表
-
-
4.18.1. ヘルプと多弁さに関するオプション
-
4.18.2. どの段階を実行するか
-
4.18.3. 通常以外の実行モード
-
4.18.4. 出力先の変更
-
4.18.5. 中間ファイルの保持
-
4.18.6. 一時ファイル
-
4.18.7. インポートされたものを見つける
-
4.18.8. インタフェースファイルに関するオプション
-
4.18.9. 再コンパイル検査
-
4.18.10. 対話モードのオプション
-
4.18.11. パッケージ
-
4.18.12. 言語オプション
-
4.18.13. 警告
-
4.18.14. 最適化水準
-
4.18.15. 個々の最適化
-
4.18.16. プロファイルに関するオプション
-
4.18.17. プログラム網羅オプション
-
4.18.18. Haskell前処理器オプション
-
4.18.19. Cプリプロセッサオプション
-
4.18.20. コード生成オプション
-
4.18.21. プログラムのリンク
-
4.18.22. 段階の置き換え
-
4.18.23. 特定の段階にオプションを強制する
-
4.18.24. プラットフォーム固有のオプション
-
4.18.25. 外部コアファイルに関するオプション
-
4.18.26. コンパイラのデバッグに関するオプション
-
4.18.27. その他のコンパイルオプション
-
5. プロファイルを取る
-
-
5.1. コスト集約点とコスト集約点スタック
-
-
5.1.1. コスト集約点を手動で挿入する
-
5.1.2. コストの配分規則
-
5.2. プロファイルについてのコンパイルオプション
-
5.3. 時間及び確保量のプロファイルを取る
-
5.4. メモリ使用状況のプロファイルを取る
-
-
5.4.1. ヒーププロファイルのためのRTSオプション
-
5.4.2. 維持原因プロファイル
-
-
5.4.2.1. 維持原因プロファイルに関するヒント
-
5.4.3. 経歴プロファイル
-
5.4.4. 実際のメモリ使用量
-
5.5. hp2ps––ヒーププロファイルをPostScriptへ
-
-
5.5.1. hpファイルを操作する
-
5.5.2. プロファイルの特定の部分に注目する
-
5.5.3. 実行中のプログラムのヒーププロファイルを見る
-
5.5.4. ヒーププロファイルを実時間で閲覧する
-
5.6. コード網羅率を観察する
-
-
5.6.1. 小さな例: 逆数をとる
-
5.6.2. 網羅率の測定器を付与するオプション
-
5.6.3. hpcツールキット
-
-
5.6.3.1. hpc report
-
5.6.3.2. hpc markup
-
5.6.3.3. hpc sum
-
5.6.3.4. hpc combine
-
5.6.3.5. hpc map
-
5.6.3.6. hpc overlayとhpc draft
-
5.6.4. Haskell Program Coverageの注意点と短所
-
5.7. 「ticky-ticky」プロファイルを使う
-
6. より早く、より高速で、より小さく、より慎ましくあるための助言
-
-
6.1. より早く: プログラムを素早く生成する
-
6.2. より速く: 高速に動作するプログラムを作る
-
6.3. より小さく: 小さいプログラムを作る
-
6.4. より慎ましく: 少ないヒープで動作するプログラムを作る
-
7. GHCの言語機能
-
-
7.1. 言語オプション
-
7.2. 非ボックス化型とプリミティブ演算
-
-
7.2.1. 非ボックス化型
-
7.2.2. 非ボックス化タプル
-
7.3. 構文的拡張
-
-
7.3.1. Unicode構文
-
7.3.2. 魔法の井桁(magic hash)
-
7.3.3. 演算子を修飾する際の新しい構文
-
7.3.4. 階層的モジュール
-
7.3.5. パターンガード
-
7.3.6. ビューパターン
-
7.3.7. n+kパターン
-
7.3.8. 再帰的do記法
-
-
7.3.8.1. 再帰的do記法についての詳細
-
7.3.8.2. mdo記法 (廃止予定)
-
7.3.9. 並行リスト内包表記
-
7.3.10. 一般化(SQL風)リスト内包表記
-
7.3.11. 再束縛可能な構文とPreludeの暗黙インポート
-
7.3.12. 後置演算子
-
7.3.13. タプルのセクション
-
7.3.14. レコードフィールドの曖昧性除去
-
7.3.15. レコード同名利用
-
7.3.16. レコードワイルドカード
-
7.3.17. 局所結合性宣言
-
7.3.18. パッケージ修飾されたインポート
-
7.3.19. 盗まれた構文の概略
-
7.4. データ型と型シノニムへの拡張
-
-
7.4.1. 構築子のないデータ型
-
7.4.2. 中置型構築子、中置クラス、中置型変数
-
7.4.3. 型シノニムの制限緩和
-
7.4.4. 存在量化されたデータ構築子
-
-
7.4.4.1. どこが存在的か?
-
7.4.4.2. 存在型と型クラス
-
7.4.4.3. レコード構築子
-
7.4.4.4. 制約
-
7.4.5. 構築子のシグネチャを明示してデータ型を宣言する
-
7.4.6. 一般化代数データ型(GADT)
-
7.5. 「deriving」機構への拡張
-
-
7.5.1. deriving節について推論される文脈
-
7.5.2. 独立deriving宣言
-
7.5.3. より広範なクラスについてのderiving節(
Typeable
、Data
など)
-
7.5.4. newtypeについての自動導出インスタンスの一般化
-
-
7.5.4.1. deriving節の一般化
-
7.5.4.2. より精密な規定
-
7.6. クラスおよびインスタンス宣言
-
-
7.6.1. クラス宣言
-
-
7.6.1.1. 多引数の型クラス
-
7.6.1.2. クラス宣言のスーパークラス
-
7.6.1.3. クラスメソッドの型
-
7.6.2. 関数従属
-
-
7.6.2.1. 関数従属に関する諸規則
-
7.6.2.2. 関数従属の背景
-
7.6.3. インスタンス宣言
-
-
7.6.3.1. インスタンス頭部に関する規則の緩和
-
7.6.3.2. インスタンス文脈に関する規則の緩和
-
7.6.3.3. 決定不能インスタンス
-
7.6.3.4. 重複インスタンス
-
7.6.4. 文字列リテラルの多重定義
-
7.7. 型の族
-
-
7.7.1. データ族
-
-
7.7.1.1. データ族宣言
-
7.7.1.2. データインスタンス宣言
-
7.7.1.3. インポートとエクスポート
-
7.7.2. シノニム族
-
-
7.7.2.1. 型族宣言
-
7.7.2.2. 型インスタンス宣言
-
7.7.2.3. 同値性制約
-
7.7.2.4. 型族とインスタンス宣言
-
7.8. 型システムへのその他の拡張
-
-
7.8.1. 明示的な全称量化(forall)
-
7.8.2. 型シグネチャの文脈
-
7.8.3. 暗黙パラメタ
-
-
7.8.3.1. 暗黙パラメタ型制約
-
7.8.3.2. 暗黙パラメタの束縛
-
7.8.3.3. 暗黙パラメタと多相再帰
-
7.8.3.4. 暗黙パラメタと単相性
-
7.8.4. 明示的に類付けされた量化
-
7.8.5. 任意ランク多相
-
-
7.8.5.1. 例
-
7.8.5.2. 型推論
-
7.8.5.3. 暗黙の量化
-
7.8.6. 非叙述的多相
-
7.8.7. 字句的スコープを持つ型変数
-
-
7.8.7.1. 概観
-
7.8.7.2. 宣言型シグネチャ
-
7.8.7.3. 式型シグネチャ
-
7.8.7.4. パターン型シグネチャ
-
7.8.7.5. クラス宣言とインスタンス宣言
-
7.8.8. 相互再帰的な束縛に対する型付けの一般化
-
7.8.9. 単相的な局所束縛
-
7.9. Template Haskell
-
-
7.9.1. 構文
-
7.9.2. Template Haskellを使う
-
7.9.3. Template Haskellの実例
-
7.9.4. Template Haskellをプロファイルと併用する
-
7.9.5. Template Haskellの準クォート
-
7.10. アロー記法
-
-
7.10.1. コマンドのdo記法
-
7.10.2. 条件コマンド
-
7.10.3. 制御構造を自分で定義する
-
7.10.4. プリミティブな構成要素
-
7.10.5. 論文との差異
-
7.10.6. 可搬性
-
7.11. びっくりパターン
-
-
7.11.1. びっくりパターンについての非形式的な説明
-
7.11.2. 構文と意味論
-
7.12. アサーション
-
7.13. プラグマ
-
-
7.13.1. LANGUAGEプラグマ
-
7.13.2. OPTIONS_GHCプラグマ
-
7.13.3. INCLUDEプラグマ
-
7.13.4. WARNINGおよびDEPRECATEDプラグマ
-
7.13.5. INLINEおよびNOINLINEプラグマ
-
-
7.13.5.1. INLINEプラグマ
-
7.13.5.2. NOINLINEプラグマ
-
7.13.5.3. 段階管理
-
7.13.6. ANNプラグマ
-
-
7.13.6.1. 値に注釈を付ける
-
7.13.6.2. 型に注釈を付ける
-
7.13.6.3. モジュールに注釈を付ける
-
7.13.7. LINEプラグマ
-
7.13.8. RULESプラグマ
-
7.13.9. SPECIALIZEプラグマ
-
7.13.10. SPECIALIZE instanceプラグマ
-
7.13.11. UNPACKプラグマ
-
7.13.12. SOURCEプラグマ
-
7.14. 書き換え規則
-
-
7.14.1. 構文
-
7.14.2. 意味論
-
7.14.3. リストの融合変換
-
7.14.4. 特殊化
-
7.14.5. 何が起こるか制御する
-
7.14.6. COREプラグマ
-
7.15. 特殊な組込み関数
-
7.16. 総称クラス
-
-
7.16.1. 総称性を使う
-
7.16.2. 論文からの変更点
-
7.16.3. 用語と制約
-
7.16.4. もう一つの例
-
7.17. 単相性の制御
-
-
7.17.1. 恐怖の単相性限定を無効にする
-
7.17.2. 単相的パターン束縛
-
7.18. Concurrent HaskellおよびParallel Haskell
-
-
7.18.1. Concurrent Haskell
-
7.18.2. Software Transactional Memory
-
7.18.3. Parallel Haskell
-
7.18.4. 純粋なコードに並列計算用の注釈を加える
-
7.18.5. Data Parallel Haskell
-
8. 他言語関数インタフェース(FFI)
-
-
8.1. FFI追補に対するGHCの拡張
-
-
8.1.1. 非ボックス化型
-
8.1.2. IOモナドを包むnewtype
-
8.1.3. プリミティブのインポート
-
8.2. GHCでFFIを使う
-
-
8.2.1. GHCで
foreign export
とforeign import ccall "wrapper"
を使う
-
-
8.2.1.1. 自分で用意した
main()
を使う
-
8.2.1.2. 他言語のコードから呼べるようなHaskellライブラリを作る
-
8.2.2. ヘッダファイルを使う
-
8.2.3. メモリ確保
-
8.2.4. マルチスレッドとFFI
-
-
8.2.4.1. foreign importとマルチスレッド
-
8.2.4.2. HaskellスレッドとOSスレッドの関係
-
8.2.4.3. foreign exportとマルチスレッド
-
8.2.4.4.
hs_exit()
の使用について
-
9. 何かがうまくいかないとき
-
-
9.1. コンパイラが「正しくないこと」をしたとき
-
9.2. あなたのプログラムが「正しくないこと」をしたとき
-
10. その他のHaskellユーティリティプログラム
-
-
10.1. Haskell用Ctags/Etags: hasktags
-
-
10.1.1. エディタからタグを使う
-
10.2. “Haskell用Yacc”: happy
-
10.3. CコードへのHaskellインタフェースを書く: hsc2hs
-
-
10.3.1. コマンド行構文
-
10.3.2. 入力の構文
-
10.3.3. 自分で構文要素を用意する
-
11. Win32システムでGHCを運用する
-
-
11.1. WindowsプラットフォームでGHCを起動する
-
11.2. WindowsでGHCiを実行する
-
11.3. 端末を使った対話
-
11.4. ライブラリの振る舞いにおける差異
-
11.5.
GHC(および、GHCでコンパイルされた実行ファイル)をcygwinで使う
-
-
11.5.1. 背景
-
11.5.2. 問題
-
11.5.3. するべきこと
-
11.6. Win32のDLLをビルド・利用する
-
-
11.6.1. DLLを作成する
-
11.6.2. 他の言語から呼ぶためのDLLを作る
-
11.6.3. DllMain()に注意!
-
12. 既知のバグと問題点
-
-
12.1. Haskell 98とGlasgow Haskell、言語上の不準拠点
-
-
12.1.1. Haskell 98からの逸脱
-
-
12.1.1.1. 字句的構文
-
12.1.1.2. 文脈自由文法
-
12.1.1.3. 式とパターン
-
12.1.1.4. 宣言と束縛
-
12.1.1.5. モジュールシステムとインタフェースファイル
-
12.1.1.6. 数値、基本型、組込みクラス
-
12.1.1.7.
Prelude
サポートに関すること
-
12.1.2. Haskell 98の未定義動作についてのGHCの解釈
-
12.1.3. FFI仕様からの逸脱
-
12.2. 既知のバグと問題点
-
-
12.2.1. GHCのバグ
-
12.2.2. GHCi(対話的GHC)のバグ
-
索引