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とを忘れたりするので。

メモ

関数の検索
Hayoo
Hoogle

関数の使い方の例が豊富なサイト
Zvon - Haskell Reference


haskell98
haskell98 Contents
baseパッケージ
base Contents

更新履歴

2013.11.20
抜けてたHaskell98ライブラリについても追加した。

2013.11.28
Localeについてはold-localeのSystem.Localeを使うのが良さそうなのでSyste.Time.LocalTimeから変更。