haskell98ライブラリから現在のHaskellライブラリへの変遷
ネット上にあるHaskellソースを見ると昔のhaskell98あたりのライブラリ名でインポートしている例がある。それを使う場合に、新しいライブラリの方でインポートしようとした場合、対応するライブラリがどこにあるかがわからなくて相当困った覚えがある。
どこを探せばいいかというとHayooとかHoogleで関数を検索するとある。だけど、その対応関係がわからなくて四苦八苦したので、初めて使う人が困らないように古いライブラリの対応をどうすればいいかを表にまとめてみた。新しい方というのはGHCのbaseパッケージにだいたいある。
昔(haskell98等) | 現在(2012/10/11) | 収録package | |
Array | Data.Array | base | |
Bits | Data.Bits | base | |
CError | Foreign.C.Error | base | |
CForeign | Foreign.C | base | |
CPUTime | System.CPUTime | base | |
CString | Foreign.C.String | base | |
CTypes | Foreign.C.Types | base | |
Char | Data.Char | base | |
Complex | Data.Complex | base | |
Directory | System.Directory | base | |
ForeignPtr | Foreign (?) | base | |
IO | System.IO | base | |
Int | Data.Int | base | |
Ix | Data.Ix | base | |
List | Data.List | base | |
Locale | System.Locale | old-locale | |
MarshalAlloc | Foreign.Marshal.Alloc | base | |
MarshalArray | Foreign.Marshal.Array | base | |
MarshalError | Foreign.Marshal.Error | base | |
MarshalUtils | Foreign.Marshal.Utils | base | |
Maybe | Data.Maybe | base | |
Monad | Control.Monad | base | |
Numeric | Numeric (変わらず) | base | |
Ptr | Foreign.Ptr | base | |
Random | System.Random | random | |
Ratio | Data.Ratio | base | |
Storable | Foreign.Storable | base | |
System | System.Exit, System.Environment | base | |
Time | Data.Time | time | |
Word | Data.Word | base | |
Parsec | Text.Parsec (こっちを使いましょう) or Text.ParsarCombinators.Parsec |
parsec |
古い方のライブラリから、新しい方のライブラリを使いたいかなと思う場合は、表のとおりに変えればちゃんと動くと思う。
以下のパッケージはcabalとかでインストールすればイイ。
- Random
- Time
- Text.Parsec or Text.ParserCombinators.Parsec
$ cabal install time $ cabal install random $ cabal install parsec
自分の知る限りの変遷なので抜け間違いがあったら追加したり修正します。
Text.Parsec と Text.ParserCombinators.Parsecのどちらを使うべきか
この問題については↓を参照すると・・・
http://keqh.net/cookbook/recipes/parsec/106.html
普通に使うにはText.Parsecを使ったほうがいいので、Text.Parsecを使いましょう。Text.ParserCombinators.Parsec は打ち間違いをしてしまいがちな気がするのでなおさら使わないほうがいいです。ParsarCombinatorsを Parsec とか Parser とかをスペルミスしたり、ParsarCombinatorsのsとを忘れたりするので。
更新履歴
2013.11.20
抜けてたHaskell98ライブラリについても追加した。
2013.11.28
Localeについてはold-localeのSystem.Localeを使うのが良さそうなのでSyste.Time.LocalTimeから変更。