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 を参照してください.
  • 構成子の引数が確実に非リフト型であるデータ型のジェネリックインスタンスを導出できるようになりました. 詳しくは Generic programming を参照してください.
  • GHC のジェネリックスは Selector 経由で,データ構成子のフィールドに関する 正格性情報を提供できるようになりました.
  • -XDeriveAnyClass 拡張は関連型族のデフォルトインスタンスを含むクラスを 導出したときに,そのインスタンスにある隙間を埋めるようになりました.
  • レコードパターンのシノニムを定義できるようになりました. そのおかげで,パターンシノニムがより通常のデータ構成子と同じように振る舞えるようになりました. たとえば,

    pattern P :: a -> b -> (a, b)
    pattern P{x,y} = (x,y)
    

    とすれば P はデータ構成子として振る舞えます. また,これで選択子関数 x :: (a, b) -> ay :: (a, b) -> b を定義したことになります.

  • パターンシノニムは型構成子と一つにまとめるられるようになりました. パターンシノニム P と型構成子 T について PT をひとまとめにして, 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 は 過剰な memptypure 式なしで,コードを生成するようになりました. 結果として -XDeriveTraversable は非リフト型の引数を含むデータ型に対しても 機能するようになりました.
  • 長年にわたって壊れていると 判っている -XImpredicativeTypes 拡張は,今回のリリースでは以前にも増して 壊れる機会が増えていることに注意が必要です (Trac #11319Trac #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 を有効にしても効果はありません.
  • -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-semigroup-instances オプションを追加しました. このオプションは mappendSemigroup(<>) 演算を使わずに定義している Monoid インスタンスがあることを警告します.
  • -Wmissing-pattern-synonym-signatures フラグを追加しました. これを有効にすると,パターンシノニムの定義に型シグネチャがないとの警告が出ます. デフォルトでは無効になっていますが -Wall が有効になっていると, これも有効になります.
  • データ族および型族のインスタンスで使われていない型変数があることを警告する -Wunused-type-patterns フラグを追加しました. このフラグは -Wall を指定しても有効にはなりません. その理由は -Wunused-type-patterns が未使用の型変数があると,その型がドキュメントとして使うものであっても,警告を出すからです. -Wunused-type-patterns が有効であれば, 型変数をアンダースコアから始まる名前にするか,アンダースコアそのものに置き換えてしまえば, この警告は出なくなります.
  • 従来の -Wunused-matches から,新しく -Wunused-foralls を分離しました. このフラグは,ユーザが使われていな型変数に対して明示的に forall 構文を使うという特別な場合に警告を出します. -Wunused-matches は項レベルのパターンについてのみ警告を出します. どちらのフラグも,-W を指定すると有効になります.

3.2.3. GHCi

  • Main モジュールを明示的に宣言しているのに main が含まれていないとエラーになります (Trac #7765).
  • :back コマンドおよび :forward コマンドでは, ユーザが履歴を一度に複数ステップ移動できるように引数でカウントを渡せるようになりました.
  • :load! コマンドと :reload! コマンドを 追加しました. これを使うと,モジュールをロードする前に -fdefer-type-errors フラグが有効になります. このフラグをもともと有効にしていなければ,モジュールのロードが済みしだい,無効に戻ります (Trac #8353).
  • トップレベルの関数定義ができるようになりました(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 は NormalCRecC (レコード構文) および ForallC 構成子を使ってエンコードしていました. クォート,スプライス,具体化中では,新しい構成子 GadtCRecGadtC をサポートするようにしました.
  • プリミティブ文字(たとえば [| 'a'# |])やプリミティブ文字列(たとえば, [| "abc"# |]) を Template Haskell でクォートできるようになりました. Lit データ型もプリミティブ文字リテラル用にあらたに構成子 CharPrimL を備えるようになりました.
  • addTopDecls がアノテーションプラグマを受け入れるようにしました.
  • 準クォートの実装は内部的には通常の Template Haskell のスプライスに統合されました. 従来の実装では,トップレベル宣言の準クォートは $(...) 形式のスプライスとはちがって, 宣言グループを抜けることはありませんでした. この振舞いは新しい実装でも維持してます. これについては Syntax で説明してあります.
  • データ構成子 FamilyD と データ型 FamFlavour を廃止しました. データ族は DataFamilyD で表現するようになりました. またオープンな型族は OpenTypeFamilyD で表現し FamilyD では表現しなくなりました. OpenTypeFamilyDClosedTypeFamilyD の共通の要素は TypeFamilyHead となりました.
  • datanewtypedata instancenewtype instance の宣言は deriving 節のマルチパラメータ型クラスに対して利用可能になりました. たとえば,導出されたクラスのリストに対しては, dataDnewtypeD[Name] ではなく CxtQ を引数に取るようになりました.
  • isExtEnabled を使って Q モナドで言語拡張が利用可能か決定できるようになりました. 同様に extsEnabled を使て利用可能な言語拡張を一覧できるようになりました.
  • Template Haskell の reifyConStrictness 関数を使って,構成子の正格性を具体化 できるようになりました. この関数は -XStrictData あるいは -funbox-strict-fields が 有効になっているかを確認します.
  • 従来は a -> a のような型シグネチャをクォートすると forall a. a -> a に対応する 抽象構文が生成されていました. このふるまいは維持していますが,カインドにまで拡張されています. すなわち Proxy a -> Proxy aforall k (a :: k). Proxy a -> Proxy a に なるということです. この変更は意図的なものではなく,GHC にはカインドを型と分別するのは困難なので しかたなく,そうなっています. この変更による影響は,カインド多相型の往復変換には -XTypeInType 拡張が 必要になったということです.

3.2.5. ランタイムシステム

  • 64-bit プラットフォーム用にピカピカの2段階メモリアロケーションを備えました(Trac #9706 参照). ランタイムシステムの実装を単純になったのに加えて,ガーベッジコレクタの性能が大幅に向上しました. とはいうものの,Haskell のプロセスの仮想メモリのフットプリントが, 見掛け上テラバイト級になることもあります. でも心配はいりません. このような大きさでもほとんどの場合,単にマッピングがあるだけで,物理メモリの裏付けがないアドレス空間が コミットされることはありません.
  • PAPI を使ったパフォーマンス管理はサポートしなくなりました.
  • -N を補うために -maxN⟨x⟩ フラグを追加しました. -N を指定したときのプロセッサ数を高々 ⟨x⟩ に制限したいときに使ってください.
  • ランタイムリンカは貪欲ではなくなり,アーカイブから必要なオブジェクトのみをロードするようになりました. 特に 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つの型 SrcLocCallStack を エクスポートするようになりました. SrcLoc 開始点および終了点に加えて,パッケージ名,モジュール名,ファイル名が含まれています. CallStack は本質的には [(String, SrcLoc)] と同じで,もっとも最近呼び出されたものが 先にくるようにソートしてあります.
  • error および undefined が,新しい CallStack 機能 (および有効であれば -prof スタック)を使って部分的なスタックトレースを 報告するようにしました.
  • あらたに interruptible 関数を GHC.IO に加えました. この関数は IO アクションを非同期例外で割り込めるように走らせます. 例外がマスクされていても割り込めます.ただし interruptibleMask でマスクされていると 割り込めません.

    この関数は allowInterrupt の振る舞いを修正するために導入したものです. 従来の allowInterrupt は割り込み不可範囲での不正な割り込みを許してしまっていました. (Trac #9516 参照)

  • スレッド毎のアロケーションカウンタ (setAllocationCountergetAllocationCounter) および上限 (enableAllocationLimitdisableAllocationLimit) が System.Mem をインポートすれば使えるようになりました. 従来,この機能は GHC.Conc をインポートしないと使えませんでした.
  • foreverfilterMmapAndUnzipMzipWithMzipWithM_replicateM および replicateMMonad から Applicative へ一般化しました. これらを使って性能が低下した場合は,(>>) に対応する (*>) を実装してみてください (Trac #10168 参照).
  • URecUAddrUCharUDoubleUFloatUInt および UWordGHC.Generics に追加しました. GHC Generics で非リフト型を扱えるようにするための方策の一部です(Trac #10868).
  • Floating クラスを拡張して,より精度のよい,log1pexpm1log1pexplog1mexp を使えるようにしました. これらは Prelude をインポートしても使えません.Numeric をインポートすれば Floating クラスのすべての機能が使えます.
  • Data.List.NonEmptyData.Semigroup (こちらは将来, Monoid``のスーパークラスになる予定) を追加しました. これらのモジュールは従来 ``semigroups パッケージで提供されていました(Trac #10365).
  • GHC.TypeLits.TypeErrorErrorMessage を追加しました. これを使って独自のコンパイル時エラーメッセージを定義できます(Custom compile-time errors および 元の プロポーザル を参照してください).
  • GHC.Generics 内のデータ型が正しく以下のクラスのインスタンスになるようにしました. EnumBoundedIxFunctorApplicativeMonadMonadFixMonadPlusMonadZipFoldableFoldableTraversableGeneric1Data (Trac #9043).
  • ProxyGeneric インスタンスはカインド多相になりました.(Trac #10775 参照)
  • [Char]IsString インスタンスを変更して多重定義した文字列や (++) 関数 で曖昧性がでないようにしました.
  • ConstControl.Applicative から独自のモジュール Data.Functor.Const に移動しました(Trac #11135 参照).
  • Data.Functor.Const モジュール内では PolyKinds を有効にし,Const の カインドを * -> k -> * とできるようになりました(see Trac #10039).
  • データ型 TypeErrorControl.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 型を廃止しました.代りに HsSrcBangHsImplBang を使ってください. データ構成子はインポートしたモジュール由来かどうかにかかわらず, ユーザが書いたとおりの正格性アノテーションを常に持ち回ります.
  • startsVarSymstartsVarIdstartsConSymstartsConIdstartsVarSymASCIIisVarSymCharLexeme モジュールから ghc-boot ライブラリの GHC.Lemexe モジュールに移動しました.
  • isImportisDeclisStmt 関数を追加しました.
  • ModIfacemi_fix_fn フィールドの型を OccName -> Fixity から OccName -> Maybe Fixity へ変更しました. 返り値が Nothing であれば,キャッシュミスがあったことが判ります. この変更の結果,mkIfaceFixCacheemptyIfaceFixCache も返り値の型は 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. 既知のバグ