HaskellのスタンダードモジュールはPreludeと呼ばれ、明示的にインポートしなくても暗黙インポートされるため標準で使用できます。ここにはInt
やString
などの基本的なデータ型や、四則演算やブール演算を始めとする基本的な関数等が定義されています。明示的にインポート文を書けば、この中の一部の関数だけをインポートする、あるいは一部を除外することができます。
しかしPrelude
内には、特定のデータ型に対して定義されている関数が多くあり、別のデータ型に対して同名の関数を使いたい場合などは、別名のインポートをしたり、Prelude
の関数をhidingする必要があります。このような面倒を避けるために、classy-prelude
というパッケージが提供されています。以下のような目的で作られています。
A better Prelude. Haskell's Prelude needs to maintain backwards compatibility and has many aspects that no longer represents best practice. The goals of classy-prelude are:
- remove all partial functions
- modernize data structures
- generally use Text instead of String
- encourage the use of appropriate data structures such as Vectors or HashMaps instead of always using lists and associated lists
- reduce import lists and the need for qualified imports
このパッケージを使うことで、Prelude
では特定のデータ型にしか使えなかった関数が、ClassyPrelude
では型クラスのメソッドとして定義されていて、複数の型に対して使用できるようになり、別名インポートをしなくて良いケースが増えるようです。私は実はまだ使ったことがないのですが、githubに公開されていたあるサンプルプロジェクト内でインポートされているのを見て知りました。今度使ってみようと思います。皆さんもよければ調べてみてください。今度時間があったらサンプルを載せます。
参考
haskellプログラムのimportの別名が多くなる問題にはclassy-preludeを使いましょう
例とともに紹介している。デメリットも書いてある。
Prelude を カスタムPrelude で置き換える
似たような目的で作られている他のパッケージについても紹介されている。