2016-01-11 『ふつうのHaskellプログラミング』 もくもく読書会(第12章) の振り返り
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/10/05
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
第12章 Wikiエンジンの開発
今回はまずはサンプルプログラムをコンパイルして動かしてみる。
参照:『ふつうのHaskellプログラミング』サポートページ――LazyLinesの入手とインストール
http://i.loveruby.net/ja/stdhaskell/lazylines.html
- 本のサンプルは古いHaskellで実装されているので、サンプルコードはそのままでは動かない。
- WebサーバなどのプログラムはRubyで書かれているがダウンロードファイルにサーバの実行ファイルが用意されているのでRubyのインストールなどは不要
Haskellの古いバージョンから新しいのに変える修正はこちらを参考にしました。
Haskellを始めるにあたって読むべき3冊の本 - セカイノカタチ::Techlog
ここにGitHubに修正したものを置いてあるリンクがあるので、そこのソースと比較して修正すると動きました(GHC 7.10.2)
修正箇所
- 現在のHaskellだとPreludeのcatchがなくなっているのでSystem.IO.ErrorのcatchIOErrorに変更する必要がある
- System.IO.Errorがインポートされていないソースファイルでcatchを使っている個所は
import System.IO.Error
のインポートが必要 - Database.hsは日時関連が変更されているの修正が必要
Database.hsの日時関連の処理は上記のGitHubのソースを参考に直してみた。
- インポートに下記を追加
import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds) import Data.Time (UTCTime)
- 日時の型変換(UTCTime -> ClockTime)
mtime path = toCalendarTime =<< getModificationTime path
↓
mtime :: String -> IO CalendarTime mtime path = toCalendarTime . uToC =<< getModificationTime path uToC :: UTCTime -> ClockTime uToC t = TOD ( truncate . utcTimeToPOSIXSeconds $ t) 0
ここではgetModificationTime関数で得た値(UTCTime)を直接toCalendarTime関数に渡さず、ClockTimeに変換して渡している
toCalendarTime :: ClockTime -> IO CalendarTime
getModificationTime :: FilePath -> IO UTCTime
コメント
- ここら辺の修正方法はどこで見つけたのだろうか?
→ 公式なマイグレーションガイドなどがある?
その他
今回はサンプルを動かすところで時間が来たので、本の名内容は次回に持ち越し。
前もってサンプルを動かせるようにした方が良いかも?