GHC 7.8.1がリリースされ、Haskellのエコシステムがいくつか改善された。iOS向けにコンパイルできるようになり、Closed Type Families, Roles, Overloaded Lists, Pattern Synonymsなどの新しい機能が追加され、性能改善が行われた。
Haskellはclangを使ってiOSにコンパイルされる。これはXCode 5を使った開発をサポートする。HaskellにはクロスプラットフォームのGUIがないので、GUIはobjectiveCで別途開発し、GUIコードからHaskellのコードを呼ぶ必要がある。この対応は7ヶ月前から発表されていたが、このサポートを含んだGHCのリリースは初めてだ。
Template HaskellはまだiOSでは使えない。
クロスプラットフォームのコンパイルは全般的に改善されている。例えば、動的リンキングは改善されている。GHCiはデフォルトで組み込みの静的リンカではなく、システム動的リンカを使うようになった。GHCを使えば、新しいコンパイルフラグ"--dynamic-too"で、同時に静的オブジェクトファイルと動的オブジェクトファイルのふたつを生成できる(GHCはまだ静的リンキングを使う)。
このリリース追加された他の機能は次の通り。
- Closed Type Families - 型ファミリはデータ型をオーバーロードするのに利用される。クローズドのファミリタイプはひとつの場所で定義された同等物のすべての特徴を持ち、拡張できない。元の開発者が意図していなかった問題が発生するを防ぐことができる。
- Roles - GeneralizedNewTypeDerivingを使ったときに安全でない型の定義を除去してくれる。
- Overloaded Lists - リストの表記の糖衣構文。Set、Map、IntMap、Vector、Text、Arrayなどのデータ構造の作成に使う。
- Pattern Synonyms
- Typeableがpoly-kindになった。Typeable1、Typeable2などを作成するのは、旧式で利用非推奨。
- 32コアまで線形に拡張する新しいI/Oマネージャ
- Template Haskellの改善。Roles、アノテーション、"型付きTemplate Haskell式"のサポート。
- makeのパラレルモード
- タイプナチュラルの解決の改善(性能改善)
大きな変更は次のリリース(7.10)に来るかもしれない。それは、ApplicativeがMonadのスーパークラスになることだ。この変化を簡単に乗り切るため、現在のバージョンのGHCはMonadであってApplicativeでない型やMonadPlusであってAlternativeでない型のインスタンスには警告が出力される。また、ローカル関数の名前がjoin、<*>、pureで定義されている場合も同様だ。
他にも変更点がある。詳細はリリースノートで確認できる。
GHCとHaskellで使えるHaskell Platformはまだ最新のGHCにはアップデートされていない。