LoginSignup
2
1

More than 5 years have passed since last update.

古いアプリの ghc-7.8 、 ghc-7.10 系への対応

Last updated at Posted at 2015-09-11

先月、 ghc-7.6.x 系でビルドしていたアプリ を ghc-7.10.x でビルドできるようにしたので、忘れないうちに何をやったかメモっておく。

Typeableのdriving

TypeablePolyKinds でいい感じになったり手でインスタンス作るの禁じられたりしたので自動で導出できるように手直し。

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向けの有名なやつ。 MonadFunctorApplicative 継承するようになったので、 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 に対応しておいた方が喜ばれる。特に複数パッケージにまたがってビルドしなきゃいけない実行ファイルのリポジトリとか。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1