先月、 ghc-7.6.x 系でビルドしていたアプリ を ghc-7.10.x でビルドできるようにしたので、忘れないうちに何をやったかメモっておく。
Typeableのdriving
Typeable
が PolyKinds
でいい感じになったり手でインスタンス作るの禁じられたりしたので自動で導出できるように手直し。
Type role の追加
GADTs
とか使ってると type role が nominal
に推論されることがあるのだけど、デフォルトだと data
の role は representational
なので特に *.hs-boot
ファイルを作った時にギャップが生じる。ので、明示。
functional dependencies のバグ修正の影響
ghcのバージョンが上がるとバグ修正されることがあって、いいことなんだけど、それによってバグをうまく突いてビルドできていたコードが通らなくなることがある。
ということで、functional dependenc[iesとinstance
に矛盾があった部分が落ちるようになったので修正。
Functor-Applicative-Monad Proposal
これはghc-7.10.x向けの有名なやつ。 Monad
が Functor
と Applicative
継承するようになったので、 instance
定義をサボってたやつは定義する必要ある。パフォーマンス考えないのであれば自明な定義をするだけでO.K.。
Prelude に Foldable 入った
これも ghc-7.10.x 向け。 Prelude
のリスト向けの関数とかが Foldable
で定義されるようになったので型が非決定的になる部分が出てきたのを明示。
hashtablesへの移行
Data.Hashtable
が deprecated になったので、 https://hackage.haskell.org/package/hashtables へ移行。実体が type
になったりしたので ghc
に言われるままに equality constraints を追加したり。
stackへの対応
今時だと stack に対応しておいた方が喜ばれる。特に複数パッケージにまたがってビルドしなきゃいけない実行ファイルのリポジトリとか。