おじさんプログラマの子育てデスマーチ日誌

ソフトウェア開発者が会社や家庭での問題を乗り越えていく記録。本当は働きたくない。リアルな日記と子育てアイディアを配信します。

HaskellのYesodはつらいよ2017 Mac環境編

Mac OS SierraをアップデートしたらYesodでビルドが不能になった。ちなみにStackを使っている。
Ubuntsu 14.04仮想環境をVirtual boxで構築して移行したがVMがやはりぼくのマシン(Mac book air 2012ぐらい)には重い。CPUがブーブーいいだすので結局使わなかった。
http://deathmarch.hatenablog.jp/entry/2016/08/27/161156

いやあ、最新環境を追うのって辛いっすね。最近は動かなくなる。昔からこんな感じだったっけ?emacs for mac OS Xも起動時にクラッシュしたのも最近のSierra Updateによってです。その話はまた書きます。

で、Yesodが動かなくなったのでしばらく開発をやめていたのです。
どうやらコンパイラGHCがだめらしい。

対応をずっと待っていた。

最近GHC8.0.2でMac OS SIerraで対応したという情報を得た。
ここを粘って見ていたんですよ。こういうのものつらいなあ。
https://ghc.haskell.org/trac/ghc/ticket/12479

Haskellコミュニティもすぐには対応できない。手作り感がありますね。まだまだHaskellプログラマは少数派です。いままで安定したものしか使ったことなかったので、人類が進んでいく感じがする。

最先端ってこういうものなんだなあ。楽しいけど苦労もある。

で、待ちに待ったGHC 8.0.2のリリースがありました。
GHC 8.0.2を使えばビルドが成功する。と思う。

やったー。

しかし、Stackを使うには、ハードルがまだあった。
Stackは、ビルドに成功するパッケージの集合です。まだGHC8.0.2には対応していなかったわけです。
Cabalを使っていたときはパッケージ間に不整合が発生しビルドできない、いわゆるCabal Hellに陥るわけです。これも今までハマってきたなあ。Stackはこの問題を解決した。

解決策としてはStackで、コンパイラを指定する。stack.yamlでsystem-ghcを指定しよう。
それとskip-ghc-checkも必要だな、たぶん。

Turn on system GHC

system-ghc: true

https://github.com/commercialhaskell/stack/blob/master/doc/yaml_configuration.md

で、コンパイルすると、ああああ、まだだめかあああ。

ghcのバージョンと、現状のstackageが不整合があるのです。理由はghcはbaseのバージョンを持っていてそれが新しすぎるからっす。

解決策は、stackage最新版っす。素晴らしい。GHC8.0.2が含まれている。これも8.0.2のリリースから少し待った。
https://www.stackage.org/nightly-2017-01-31

つかれた。

で、まだだめだよwww

だんだん記憶も朦朧としてきたので、このあたり間違っているかもしれない。ごめんなさい。人柱疲れっす。

yesod templateで生成するcabal指定のdirectoryパッケージ指定が古くてパッケージ不整合が起きたんだよ。たぶん。罠おおすぎ。こりゃユーザ増えないってまじで。

ちょっと強引でよくないですが、~/.stack/config.yamlにプロジェクト非依存の以下を設定しましょう。

allow-newer: true

以上になります。これでビルドできるました。

このあたりも参考にしてください。

http://ku00.hatenablog.com/entry/2016/09/25/180919

つかれるな、しかし。

ところでVisual Studio 2015もupdate版を3個だしているけど、それも結構いまいちで、前のバージョンはデバッガの問題で変数値をウオッチできなかったりした。開発環境\ なんて本当に大事だからビジネスユースでは本当にこまる。ソフトウェア品質が問題になる時代は前からだと思うが、ビジネスのスピードと品質がせめぎ合う時代で、最近はスピードのほうに振れているのではないかな。つかれるよ、ともかくさ。