3. バージョン 8.0.1 のリリースノート¶
コンパイラのさまざまな部分での重要な変更は以降の節で一覧表にしてあります. 7.10ブランチに対して大量のバグ修正と性能改善を行いました.
Warning
このリリースでは,Cabal のバージョン 1.24 以降でないと正しく機能しません(Trac #11558 参照).
したがって,新しいパッケージをインストールする前に cabal-install
を再コンパイルする必要があります.
理由は GHC 8.0 でパッケージの識別方法が変更になったからです.
Cabal の以前のバージョンでは,GHCのパッケージを(GHC の -this-package-key
引数を使って)
パッケージキーで識別していましたが,GHC 8.0 以降ではパッケージキーの代りにインストール済みパッケージ
ID を使います.
Note
ユーザーが Mac OS X で XCode 7.3 を使って GHC をコンパイルするには,ビルドシステムに
Apple の新しい nm
コマンドではなく nm-classic
コマンドを使うように指示しなければなりません.
新しい nm
コマンドは POSIX の規約を破っているからです.
(Trac #11744 参照).
指示は configure
コマンドに --with-nm=$(xcrun --find nm-classic)
のように指定します.
3.1. ハイライト¶
7.10 系列からの変更のハイライトは以下のとおりです.
- 新しい
-XTypeInType
拡張を使えば,すべての型をカインドに昇格でき, カインドシノニム,カインド族,GADTの昇格などの機能が利用できます. - レコードパターンのシノニム のサポート.
-XDeriveAnyClass
拡張は関連型を使ってのクラスインスタンス導出ができるようになりました (Deriving any other class 参照).- DWARF形式のデバッグ情報の信頼性向上.
- 単射型族 のサポート.
- Applicative の
do
記法 (Applicative do-notation 参照) - データ族および型族のインスタンスにおけるワイルドカードのサポート.
-XStrict
および-XStrictData
拡張. デフォルトでモジュールを正格束縛でコンパイルできるようになりました (Bang patterns and Strict Haskell 参照).-XDuplicateRecordFields
拡張. 使用が曖昧になっていなければ,同じレコードフィールド名をもつ別の型を複数宣言できるようになりました (Duplicate record fields 参照).- 軽量の コールスタックおよびソース位置表示機構 のサポート.
- ユーザー定義の型エラーメッセージ.
- パターン網羅性検査器を書き直して大幅な改善をしました.
- インタプリタを別プロセスで起動できます(Running the interpreter in a separate process 参照). また,インタプリタはプロファイル指定したコードを実行できます.
-fexternal-interpreter
フラグと-prof
フラグを指定すれば, GHCiからスタックトレースにアクセスできるようになりました(GHCiのスタックトレース 参照).- powerpc64 アーキテクチャと powerpc64le アーキテクチャ用のネイティブコード生成器は AIX を サポートするようになりました.また,ARM のサポートも大幅に改善されました.
- いま,お読みのユーザーズガイドは作り直したものです.
- Windows XP 以前のシステムはサポートをしなくなりました.
- Windows ではPOSIXの関数を非推奨になっている名前で再エクスポートすることはしなくなりました.
3.2. 詳細¶
3.2.1. 言語拡張¶
-XTypeInType
は全称量化の型昇格および,型とカインド言語のマージをサポートします. これにより,たとえば,カインド族と型レベルGADTと連動して,高階ランクカインドを可能にします. この拡張は現時点ではまだ実験段階で,次のリリース以降なん段階かへて改良する予定です. 詳細は Kind polymorphism and Type-in-Type を参照してください.
GADT データ構成子についたHaddockのコメントをパースできるようになりました. たとえば以下のとおりです.
data Expr a where -- | Just a normal sum Sum :: Int -> Int -> Expr Int
新しく
base
制約 GHC.Stack.HasCallStack を関数に適用することで,コールスタックの一部を要求できるようになりました. たとえば以下のようにするとerrorWithCallStack
のコールサイトがプリントされます.errorWithCallStack :: HasCallStack => String -> a errorWithCallStack msg = error (msg ++ "\n" ++ prettyCallStack callStack) ghci> errorWithCallStack "die" *** Exception: die CallStack (from HasCallStack): errorWithCallStack, called at <interactive>:2:1 in interactive:Ghci1
HasCallStack
の説明は HasCallStack を参照してください.
- GHC は可視型適用をサポートするようになりました. これにより,関数が呼ばれたときに型パラメータをどう具体化すべきかを プログラマが簡単に指定できるようになりました. 詳細は Visible type application を参照してください.
- 一般的な場合に合わせるために,
hs-boot
ファイルで宣言されているデータ型の パラメータに割り当てるロールはrepresentational
になっています. しかし,データ型構成子が与えられれば,通常のロール推論が意味をなします. この仕組みを実装して,通常の Haskell のコードと同じようにhs-boot
ファイルの 非抽象データ型のデフォルトロールを事実上phantom
にしています.
- 型/データ族のインスタンス宣言で引数にワイルドカードを使って,型変数の名前には 関心がないことを示すせるようになりました. ワイルドカードはユニークな型変数に置き換えられます. 詳しくは Data instance declarations を参照してください.
- GHC では型族を単射として宣言できるようになりました. つまり,型検査器が単射であるという情報を使えるようになりました. 詳しくは Injective type families を参照してください.
- セキュリティ上の問題 に対応するために,Safe Haskell
プログラム中で
-XSafe
の注釈を使うことを禁止するようになりました.
- 構成子の引数が確実に非リフト型であるデータ型のジェネリックインスタンスを導出できるようになりました. 詳しくは Generic programming を参照してください.
- GHC のジェネリックスは
Selector
経由で,データ構成子のフィールドに関する 正格性情報を提供できるようになりました.
-XDeriveAnyClass
拡張は関連型族のデフォルトインスタンスを含むクラスを 導出したときに,そのインスタンスにある隙間を埋めるようになりました.
レコードパターンのシノニムを定義できるようになりました. そのおかげで,パターンシノニムがより通常のデータ構成子と同じように振る舞えるようになりました. たとえば,
pattern P :: a -> b -> (a, b) pattern P{x,y} = (x,y)
とすれば
P
はデータ構成子として振る舞えます. また,これで選択子関数x :: (a, b) -> a
とy :: (a, b) -> b
を定義したことになります.
パターンシノニムは型構成子と一つにまとめるられるようになりました. パターンシノニム
P
と型構成子T
についてP
とT
をひとまとめにして,T
がインポートされたときP
もインポートされるようにできます. この変更で,ライブラリの作者は実際のデータ構成子かパターンシノニムを不透明なまま 提供できるようになりました. 詳しくは Import and export of pattern synonyms を参照してください.-- Foo.hs module Foo ( T(P) ) where data T = T pattern P = T -- Baz.hs module Baz where -- P is imported import Foo (T(..))
いったん,データインスタンスをエクスポートすると,対応するデータ族もエクスポートされます. そのおかげで,以下のように書けます.
-- Foo.hs module Foo where data family T a -- Bar.hs module Bar where import Foo data instance T Int = MkT -- Baz.hs module Baz where import Bar (T(MkT))
以前のバージョンの GHC では
Bar
のエクスポートリストに明示的に書く必要がありました.
- GHC は
-XUndecidableSuperClasses
言語拡張をふくらませて, GHC の再帰的スーパークラスの検査を緩めました(Trac #10318 参照). こうすることで,相互再帰的に互いのスーパークラスになっている制約をもつクラスを 定義できるようになりました. ただし,ソルバーが停止しなくなるかもしれないというリスクはあります.
コンパイラは前もってスーパークラスで提供された制約を解決するときすこし保守的になりました (Trac #11762 参照). たとえば,以下のようなプログラムを考えてみてください.
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-} class Super a class (Super a) => Left a class (Super a) => Right a instance (Left a) => Right a -- this is now an error
GHC はこのインスタンスを拒絶するようになりました.
Right
型クラスのスーパークラスがSuper a
だと推論できないという理由です. 以前のリリース版ではこの宣言は受け入れていました.Left a
の制約からSuper a
制約が導けることを使っていたのです. この問題を解決するには単に必要となるスーパークラス制約をはっきり書きます.instance (Left a, Super a) => Right a
-XDeriveFoldable
および-XDeriveTraversable
は 過剰なmempty
やpure
式なしで,コードを生成するようになりました. 結果として-XDeriveTraversable
は非リフト型の引数を含むデータ型に対しても 機能するようになりました.
- 長年にわたって壊れていると 判っている
-XImpredicativeTypes
拡張は,今回のリリースでは以前にも増して 壊れる機会が増えていることに注意が必要です (Trac #11319 , Trac #11675 その他を参照). リリース前のテストで(多くの場合,不必要に)-XImpredicativeTypes
を 使ったせいで多数のプロジェクトが壊れました.-XImpredicativeTypes
を使う場合,リスクは自己責任でお願いします.
3.2.2. コンパイラ¶
- LLVM コード生成器は LLVM 3.7 だけをサポートするようになりました. これは以前の GHC では,ある範囲のバージョンの LLVM を並行してサポートする という方針であったことと対照的になっています. より狭い範囲のバージョンをサポートすることで,信頼性の高いサポートが できるようになると期待しています.
- 従来
-f(no-)warn...
で制御していた警告を-W(no-)...
でも制御できるようになりまた. 警告システムの書き直しの最初の段階として実現されたものです. この書き直しでは,警告の制御のしやすく,警告メッセージをわかりやすく, 他のコンパイラの構文に近づけるという改良を行っています. 従来の-f
ベースの警告フラグは,しばらくの間は関数的な性質を維持します.
-dth-dec-file
オプションを追加しました. これにより,対応する.hs
ファイルにあるすべての Template Haskell 宣言が.th.hs
ファイルにダンプ出力されるようになります. アプリケーション開発者がリポジトリでこのファイルをチェックできれば, Template Haskellで定義した識別子がどこで使われているか grep できる,というのが 基本的な考え方です. これは-ddump-to-file
を-ddump-splices
とともに使うのと似ていますが, こちらの方が生成するファイルは1つだということが,-ddump-to-file
を使うのとは異なります..hs
ファイルにはないコードだけを出力し,また, 元のファイルでの接合位置をコメントで示してくれます.
-fprint-expanded-types
オプションを追加しました. これを有効にすると,型エラーでは,型シノニムを展開した型も表示します.
-fcpr-anal
オプションを追加しました. これを有効にすると,デマンド解析器は CPR 解析を行ないます.-O
を指定すると,このオプションは有効になります. そのため-fcpr-off
は削除されましたので, 従来の-fcpr-off
の挙動が必要なときには,-fno-cpr-anal
を指定してください.
-fworker-wrapper
オプションを追加しました. これを有効にすると,正格性解析パスが済んだ後でワーカーラッパー変換を行ないます.-O
あるいは-fstrictness
指定すると,このオプションは有効になります. 正格性解析が(-fno-strictness
で)無効になっているときに-fworker-wrapper
を有効にしても効果はありません.
-ddump-strsigs
は-ddump-str-signatures
という名前にしました.
-XDeriveGeneric
は,導出の際に引数の型の具体化に関して細かい注意点がありました (Trac #11732)が,これを緩和しました. その結果,以下のコードは正当なコードになります(従来は拒絶していました).data T a b = T a b deriving instance Generic (T Int b)
- パターン照合検査器の反復回数を制御するために
-fmax-pmcheck-iterations
を追加しました. 一般の場合にはカバレッジ検査は指数オーダーになるので, デフォルトの回数はメモリや性能が爆発しないように設定してあります. デフォルトの回数は 2000000 ですが-fmax-pmcheck-iterations=<n>
で変更できます. 指定した回数を超過した場合には,その旨の警告を発行します.
-this-package-key
の名前が再度変更されました(これが最後の変更だと思いたいです). 新しい名前は-this-unit-id
です. 名前を変更したのは,ここでGHCに渡す識別子は,パッケージに大して影響しないし, 同じパッケージのライブラリに異なるユニット ID を与える可能性もあるからです.-this-package-key
は非推奨になりました.-this-unit-id
を使うか,複数のバージョンの GHC 間で可搬にしたければ,-package-name
を使うべきです.
-fdefer-type-errors
が有効で,型検査が失敗したとき,Control.Exception.ErrorCall
ではなく,Control.Exception.TypeError
を投げるようになりました.
3.2.2.1. 警告¶
- out-of-scope (スコープ外)のエラーメッセージを表示する場合, インポートが適切になされていないことが原因のときには,どうすればいいかアドバイスするようになりました.
- 警告メッセージが,それを制御している警告フラグの名前を含むようになりました
(Trac #10752).
-fshow-warning-groups
を使って警告グループ経由でこのフラグが有効にした場合は, その警告グループ名も表示されます.
-Weverything
という警告グループと,反対の-Wno-everything
が追加になりました. この警告グループは GHC がサポートする警告をすべて含んでいます. 対照的に -Wall はいくつかのスタイルにかかわる,あるいは,物議を醸している警告を除外しています.
-Wdefault
という警告グループと,反対の-Wno-default
が追加になりました. この警告グループは,デフォルトで(つまり,追加で-W
フラグを使用しなかった場合に)ghc
が有効にする警告集合として定義されています.
-Wcompat
という警告グループ(Trac #11000)と,反対の-Wno-compat
が追加になりました. 将来的にはデフォルトで有効になる予定ですが, 当面は通常のコンパイル時には無効になっています. このフラグにより,警告がでる前に,ライブラリ作者が自分のコードの可搬性を積極的に 確保し,新しい機能に調整しやすくなります.
-Wmissing-monadfail-instances
フラグが追加になりました. これを有効にするとMonadFail
制約がない文脈で,失敗する可能性のあるパターンが 使用されたときに警告が出ます. このフラグは MonadFailの提案 (MFP) の最初のフェーズになります.
-Wsemigroup
フラグが追加になりました. これを有効にすると,型がMonoid
のインスタンスだがSemigroup
のインスタンス ではない場合で(<>)
をユーザーが独自に定義している場合に,警告が出ます. この警告がでないようにコードを修正するとMonoid
のスーパークラスとしてSemigroup
の 定義がコードを壊さないことが確実になります.
- ながらく使えなくなっていた(Trac #10935 参照)
-Wmonomorphism-restriction
(以前は-fwarn-monomorphism-restriction
) フラグが復活しました. このフラグ機能は 2016 年のとあるコミットでうっかり削除されてしまいました. これを修正し以前と同様に警告が出るようになっています.
-Wmissed-specialisations
オプション,および,-Wall-missed-specialisations
を追加しました. これを有効にすると,多重定義された関数をインポートして特定化できないとき (典型的な例はINLINEABLE
プラグマがないとき)警告が出ます. ユーザーがINLINEABLE
を指定しても期待した速度向上が得られない場合があることに 気づくようにという意図もあります.
-Wnoncanonical-monad-instances
と-Wnoncanonical-monadfail-instances
を追加しました. これはApplicative
/Monad
/MonadFail
インスタンスの定義が正式ではないこと の検出に役立ちます.詳しくは Warnings and sanity-checking のフラグの説明を参照してください.
-Wnoncanonical-semigroup-instances
オプションを追加しました. このオプションはmappend
がSemigroup
の(<>)
演算を使わずに定義しているMonoid
インスタンスがあることを警告します.
-Wmissing-pattern-synonym-signatures
フラグを追加しました. これを有効にすると,パターンシノニムの定義に型シグネチャがないとの警告が出ます. デフォルトでは無効になっていますが-Wall
が有効になっていると, これも有効になります.
- データ族および型族のインスタンスで使われていない型変数があることを警告する
-Wunused-type-patterns
フラグを追加しました. このフラグは-Wall
を指定しても有効にはなりません. その理由は-Wunused-type-patterns
が未使用の型変数があると,その型がドキュメントとして使うものであっても,警告を出すからです.-Wunused-type-patterns
が有効であれば, 型変数をアンダースコアから始まる名前にするか,アンダースコアそのものに置き換えてしまえば, この警告は出なくなります.
- 従来の
-Wunused-matches
から,新しく-Wunused-foralls
を分離しました. このフラグは,ユーザが使われていな型変数に対して明示的にforall
構文を使うという特別な場合に警告を出します.-Wunused-matches
は項レベルのパターンについてのみ警告を出します. どちらのフラグも,-W
を指定すると有効になります.
-Wmissing-local-sigs
は非推奨になりました.-Wmissing-local-signatures
を使ってください.
-Wmissing-exported-sigs
は非推奨になりました.-Wmissing-exported-signatures
を使ってください.
3.2.3. GHCi¶
Main
モジュールを明示的に宣言しているのにmain
が含まれていないとエラーになります (Trac #7765).
:load!
コマンドと:reload!
コマンドを 追加しました. これを使うと,モジュールをロードする前に-fdefer-type-errors
フラグが有効になります. このフラグをもともと有効にしていなければ,モジュールのロードが済みしだい,無効に戻ります (Trac #8353).
ghci -e
はghc -e
と同じ振舞いになりました(Trac #9360).
- トップレベルの関数定義ができるようになりました(Trac #7253).
- 新しく
:all-types
コマンド,:loc-at
コマンド,:type-at
コマンド,:uses
コマンドが追加になりました. エディタ(Emacs のhaskell-mode
など)との統合を進めるためののもで, もともとghci-ng
としてデビューしたものが GHCi に統合されました (Trac #10874).
3.2.4. Template Haskell¶
- 新しく
-XTemplateHaskellQuotes
フラグを追加し,TemplateHaskell
のクォート(準クォートではない)のサブセットが使えるようにしました. ステージ1のコンパイラを使うとき(たとえばインタプリタをサポートしないGHCを使うとき)に便利です. また-XTemplateHaskellQuotes
は Safe Haskell でも安全だとみなせます.
- GHC 7.10.1 で導入された
-XTemplateHaskell
のサポートあるかどうかを 示す CPP 定数__GLASGOW_HASKELL_TH__
の値は1
/0
に変更になりました. 従来はYES
/NO
でした.
- 部分型シグネチャがスプライスで使えるようになりました. Where can they occur? を参照してください.
- Template Haskell は型付きホールと未束縛変数のクォートを完全にサポートするようになりました. これにより,クォートブラケットの内部で,ネストしたパターンスプライスが使えるようになりました.
- Template Haskell は,型の中で
UInfixT
を使って,型演算子の結合方向を解決できるようになりました. 同じような調子でUInfixP
はパターン,UInfixE
は式と対応しています.ParensT
およびInfixT
もパターンや式に対応する同様の機能として導入されました.
- Template Haskell がGADTを明示的にサポートするようにしました.
従来,GADT は
NormalC
とRecC
(レコード構文) およびForallC
構成子を使ってエンコードしていました. クォート,スプライス,具体化中では,新しい構成子GadtC
とRecGadtC
をサポートするようにしました.
- プリミティブ文字(たとえば
[| 'a'# |]
)やプリミティブ文字列(たとえば,[| "abc"# |]
) を Template Haskell でクォートできるようになりました.Lit
データ型もプリミティブ文字リテラル用にあらたに構成子CharPrimL
を備えるようになりました.
addTopDecls
がアノテーションプラグマを受け入れるようにしました.
- 準クォートの実装は内部的には通常の Template Haskell のスプライスに統合されました.
従来の実装では,トップレベル宣言の準クォートは
$(...)
形式のスプライスとはちがって, 宣言グループを抜けることはありませんでした. この振舞いは新しい実装でも維持してます. これについては Syntax で説明してあります.
Lift
クラスが-XDeriveLift
拡張により導出可能になりました. 詳しくは Deriving Lift instances を参照してください.
- データ構成子
FamilyD
と データ型FamFlavour
を廃止しました. データ族はDataFamilyD
で表現するようになりました. またオープンな型族はOpenTypeFamilyD
で表現しFamilyD
では表現しなくなりました.OpenTypeFamilyD
とClosedTypeFamilyD
の共通の要素はTypeFamilyHead
となりました.
data
,newtype
,data instance
とnewtype instance
の宣言はderiving
節のマルチパラメータ型クラスに対して利用可能になりました. たとえば,導出されたクラスのリストに対しては,dataD
とnewtypeD
は[Name]
ではなくCxtQ
を引数に取るようになりました.
isExtEnabled
を使ってQ
モナドで言語拡張が利用可能か決定できるようになりました. 同様にextsEnabled
を使て利用可能な言語拡張を一覧できるようになりました.
- Template Haskell の
reifyConStrictness
関数を使って,構成子の正格性を具体化 できるようになりました. この関数は-XStrictData
あるいは-funbox-strict-fields
が 有効になっているかを確認します.
- 従来は
a -> a
のような型シグネチャをクォートするとforall a. a -> a
に対応する 抽象構文が生成されていました. このふるまいは維持していますが,カインドにまで拡張されています. すなわちProxy a -> Proxy a
がforall k (a :: k). Proxy a -> Proxy a
に なるということです. この変更は意図的なものではなく,GHC にはカインドを型と分別するのは困難なので しかたなく,そうなっています. この変更による影響は,カインド多相型の往復変換には-XTypeInType
拡張が 必要になったということです.
3.2.5. ランタイムシステム¶
- 64-bit プラットフォーム用にピカピカの2段階メモリアロケーションを備えました(Trac #9706 参照). ランタイムシステムの実装を単純になったのに加えて,ガーベッジコレクタの性能が大幅に向上しました. とはいうものの,Haskell のプロセスの仮想メモリのフットプリントが, 見掛け上テラバイト級になることもあります. でも心配はいりません. このような大きさでもほとんどの場合,単にマッピングがあるだけで,物理メモリの裏付けがないアドレス空間が コミットされることはありません.
- PAPI を使ったパフォーマンス管理はサポートしなくなりました.
- ランタイムリンカは貪欲ではなくなり,アーカイブから必要なオブジェクトのみをロードするようになりました. 特に Windows で,たとえば C99 のサポートを要求するパッケージが正しく機能するようになりました. その一環として Windows上の RTS は非推奨の POSIX 関数を非推奨になっていない名前で再エクスポート するようなことはなくなりました(Trac #11223 参照).
- ARM 上のランタイムリンカの微妙ですが重大な問題を大量に解決しました (要約が Trac #11206 にあります).
3.2.6. ビルドシステム¶
- 変更はありません.
3.2.7. パッケージシステム¶
- さまざまな内部変更がありますが,ユーザーから見えるものはありません.
3.2.8. hsc2hs¶
hsc2hs コマンドは
#alignment
マクロをサポートするようになりました. このマクロを使ってバイト列中の構造のアライメントを計算できるようになりました. 従来#alignment
は#let
ディレクティブを使って, たとえば以下のように手で実装する必要がありました.#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
いまは上のようなディレクティブがあるコードを GHC 8.0 でコンパイルすると以下のような警告がでます.
Module.hsc:24:0: warning: "hsc_alignment" redefined [enabled by default] In file included from dist/build/Module_hsc_make.c:1:0: /path/to/ghc/lib/template-hsc.h:88:0: note: this is the location of the previous definition #define hsc_alignment(t...) \ ^
従来のバージョンではこの警告を出し,GHC 8.0 では出ないようにするには, ディレクティブを GHC のバージョンをチェックするディレクティブで囲みます.
#if __GLASGOW_HASKELL__ < 800 #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__) #endif
3.3. ライブラリ¶
3.3.1. array¶
- バージョン 0.5.1.1 (従来 0.5.1.0)
3.3.2. base¶
完全なリリースノートは base
パッケージになる changelog.md
を参照してください.
- バージョン 4.9.0.0 (従来 4.8.2.0)
- GHC.Stack モジュールがあらたに2つの型
SrcLoc
とCallStack
を エクスポートするようになりました.SrcLoc
開始点および終了点に加えて,パッケージ名,モジュール名,ファイル名が含まれています.CallStack
は本質的には[(String, SrcLoc)]
と同じで,もっとも最近呼び出されたものが 先にくるようにソートしてあります.
error
およびundefined
が,新しいCallStack
機能 (および有効であれば-prof
スタック)を使って部分的なスタックトレースを 報告するようにしました.
あらたに
interruptible
関数をGHC.IO
に加えました. この関数はIO
アクションを非同期例外で割り込めるように走らせます. 例外がマスクされていても割り込めます.ただしinterruptibleMask
でマスクされていると 割り込めません.この関数は
allowInterrupt
の振る舞いを修正するために導入したものです. 従来のallowInterrupt
は割り込み不可範囲での不正な割り込みを許してしまっていました. (Trac #9516 参照)
- スレッド毎のアロケーションカウンタ (
setAllocationCounter
とgetAllocationCounter
) および上限 (enableAllocationLimit
,disableAllocationLimit
) がSystem.Mem
をインポートすれば使えるようになりました. 従来,この機能は GHC.Conc をインポートしないと使えませんでした.
forever
,filterM
,mapAndUnzipM
,zipWithM
,zipWithM_
,replicateM
およびreplicateM
をMonad
からApplicative
へ一般化しました. これらを使って性能が低下した場合は,(>>)
に対応する(*>)
を実装してみてください (Trac #10168 参照).
URec
,UAddr
,UChar
,UDouble
,UFloat
,UInt
およびUWord
を GHC.Generics に追加しました. GHC Generics で非リフト型を扱えるようにするための方策の一部です(Trac #10868).
Floating
クラスを拡張して,より精度のよい,log1p
,expm1
,log1pexp
,log1mexp
を使えるようにしました. これらはPrelude
をインポートしても使えません.Numeric
をインポートすればFloating
クラスのすべての機能が使えます.
Data.List.NonEmpty
とData.Semigroup
(こちらは将来,Monoid``のスーパークラスになる予定) を追加しました. これらのモジュールは従来 ``semigroups
パッケージで提供されていました(Trac #10365).
GHC.TypeLits.TypeError
とErrorMessage
を追加しました. これを使って独自のコンパイル時エラーメッセージを定義できます(Custom compile-time errors および 元の プロポーザル を参照してください).
GHC.Generics
内のデータ型が正しく以下のクラスのインスタンスになるようにしました.Enum
,Bounded
,Ix
,Functor
,Applicative
,Monad
,MonadFix
,MonadPlus
,MonadZip
,Foldable
,Foldable
,Traversable
,Generic1
,Data
(Trac #9043).
Proxy
のGeneric
インスタンスはカインド多相になりました.(Trac #10775 参照)
[Char]
のIsString
インスタンスを変更して多重定義した文字列や(++)
関数 で曖昧性がでないようにしました.
Const
をControl.Applicative
から独自のモジュールData.Functor.Const
に移動しました(Trac #11135 参照).
Data.Functor.Const
モジュール内ではPolyKinds
を有効にし,Const
の カインドを* -> k -> *
とできるようになりました(see Trac #10039).
- データ型
TypeError
をControl.Exception
に追加しました.-fdefer-type-errors
フラグで走っている場合,型検査に失敗したときに投げられます (see Trac #10284).
3.3.3. binary¶
- バージョン 0.8.3.0 (従来 0.7.5.0)
3.3.4. bytestring¶
- バージョン 0.10.8.0 (従来 0.10.6.0)
3.3.5. Cabal¶
- バージョン 1.24.0 (従来 1.22.5.0)
3.3.6. containers¶
- バージョン 0.5.7.1 (従来 0.5.6.2)
3.3.7. deepseq¶
- バージョン 1.4.2.0 (従来 1.4.1.1)
3.3.8. directory¶
- バージョン 1.2.6.2 (従来 1.2.2.0)
3.3.9. filepath¶
- バージョン 1.4.1.0 (従来 1.4.0.0)
3.3.10. ghc¶
HsBang
型を廃止しました.代りにHsSrcBang
とHsImplBang
を使ってください. データ構成子はインポートしたモジュール由来かどうかにかかわらず, ユーザが書いたとおりの正格性アノテーションを常に持ち回ります.
startsVarSym
,startsVarId
,startsConSym
,startsConId
,startsVarSymASCII
,isVarSymChar
はLexeme
モジュールからghc-boot
ライブラリのGHC.Lemexe
モジュールに移動しました.
isImport
,isDecl
,isStmt
関数を追加しました.
- ModIface の mi_fix_fn フィールドの型を
OccName -> Fixity
からOccName -> Maybe Fixity
へ変更しました. 返り値がNothing
であれば,キャッシュミスがあったことが判ります. この変更の結果,mkIfaceFixCache
とemptyIfaceFixCache
も返り値の型はMaybe Fixity
になります. また,mi_fix :: OccName -> Fixity
という関数を新規に導入しました. この関数はmi_fix_fn
を呼ぶのですが,キャッシュミスのときは,defaultFixity
を返します.
3.3.11. ghc-boot¶
- これは内部パッケージですので,使用は慎重に.
- バージョン 8.0.1
- This package was renamed from
bin-package-db
to reflect its new purpose of containing intra-GHC functionality that needs to be shared across multiple GHC boot libraries. - 複数のGHCブートライブラリにまたがって共有しなければならない,イントラGHC機能を有するという
新しい目的を反映して,このパッケージは名前を
bin-package-db
からghc-boot
に 改名しました.
3.3.12. ghc-boot-th¶
- これは内部パッケージですので,使用は慎重に.
- バージョン 8.0.1
- このパッケージは
ghc
パッケージとtemplate-haskell
パッケージの間で, 型やユーティリティを共有するために作成しました.
GHC.Lexeme
を追加しました. このモジュールには,文字が,GHCが定義した,Haskellにおける変数あるいはデータ構成子の一文字目 になれるかを判定する関数が含まれています (これらの関数は,ghc``パッケージの ``Lexeme
モジュールから移動しました).
GHC.LanguageExtensions
を追加しました. このモジュールには,サポートされているすべての言語拡張一覧の型が含まれています.
3.3.13. ghc-prim¶
- バージョン 0.5.0.0 (従来 0.4.0.0)
3.3.14. haskell98¶
- 付属しません.
3.3.15. haskell2010¶
- 付属しません. 将来の GHC のリリースでは,このパッケージあるいはそれに類するパッケージが復活すると思います.
3.3.16. hoopl¶
- バージョン 3.10.2.1 (従来 3.10.0.2)
3.3.17. hpc¶
- バージョン 0.6.0.3 (従来 0.6.0.2)
3.3.18. integer-gmp¶
- バージョン 1.0.0.1 (従来 0.5.1.0)
3.3.19. old-locale¶
- 付属しません.
3.3.20. old-time¶
- 付属しません.
3.3.21. process¶
- バージョン 1.4.2.0 (従来 1.2.3.0)
3.3.22. template-haskell¶
- バージョン 2.11.0.0 (従来 2.10.0.0)
- 値を Template Haskell のスプライスに持ち上げるための
Lift
型クラスは デフォルトのシグネチャlift :: Data a => a -> Q Exp
を備えるようになりました. その結果Data
インスタンスの型用にlift
を明示的に実装しなくてもよくなりました.Language.Haskell.TH.Syntax
からあらたにエクスポートしたliftData
関数を使って, 手作業でこのデフォルト実装が使えます.
Info
の構成子からFixity
フィールドがなくなりました.qReifyFixity
を追加したので,この関数を使えば (Q``に特化した ``reifyFixity
関数も同様です)Quasi
型クラス 与えられたName
用の結合方向情報を検索できるようになりました.
3.3.23. time¶
- バージョン 1.6.0.1 (従来 1.5.0.1)
3.3.24. unix¶
- バージョン 2.7.2.0 (従来 2.7.1.0)
3.3.25. Win32¶
- バージョン 2.3.1.1 (従来は 2.3.1.0)
3.4. 既知のバグ¶
- この GHC のリリース付属の Haddock で作成した文書では バンドルパターンシノニム は表示されません (Trac #11954).