| name | himari |
| description | himari is ncaq's rio-like custom Haskell Prelude. Import it with a single `import Himari`, never `import Himari.Prelude` or other submodules directly. Use when writing or reviewing Haskell code in a project that depends on the himari package. |
| user-invocable | false |
himari
himariは、
ncaqが作成した、
rio
の思想を受け継ぎつつ改良したカスタムPreludeライブラリです。
himariに依存するプロジェクトでは、
NoImplicitPreludeが有効になっており、
標準のPreludeの代わりにhimariを使います。
import は import Himari の1行だけ
himariを使うモジュールでは、
原則として以下の1行だけをimportします。
import Himari
Himariモジュールが以下を全て再exportするエントリポイントだからです。
Himari.Char
Himari.Env
Himari.Env.Simple
Himari.Logger
Himari.Prelude
import Himari.Prelude を直接書かない
Himari.Preludeなどのサブモジュールを直接importするのは間違いです。
-- 間違い: サブモジュールを直接importしている
import Himari.Prelude
これをやるとHimari.CharやHimari.EnvやHimari.Loggerなどが漏れてしまい、
本来使えるはずのシンボルが見つからなくなります。
Himari.PreludeはHimariから再exportされるための内部モジュールであり、
利用側が直接importするものではありません。
同様にHimari.SafePreludeやHimari.Prelude.Typeなども基本は直接importしません。
全てimport Himariで揃います。
例外としてはSafe言語拡張を使うモジュールでHimari.SafePreludeのみをimportするケースがあります。
またhidingしたけど一部だけrenameしてシンボルを利用したいこともあるかもしれませんが、
これはqualified importの方を使うので稀でしょう。
主なシンボルの出どころ
import Himariで以下が利用可能になります。
個別importは不要です。
- ReaderT IOパターンの、
支援モナドと例えば以下の関数:
newtype Himari env a = Himari { unHimari :: ReaderT env IO a }
runHimari :: (MonadIO m) => env -> Himari env a -> m a
- 文字列・コンテナ型、例えば以下:
ByteString
HashMap
Map
NonEmpty
Seq
Set
Text
Vector
- IO・並行:
UnliftIO系、例えば以下:
UnliftIO.Async
UnliftIO.Directory
UnliftIO.Exception
- ログ: ロガーライブラリのre-exportで提供される
logInfoなど
- Aeson:
Data.Aeson系とDeriving.Aeson
そのままimportしたら名前がコンフリクトしやすい、
個別のモジュールに属する関数が必要になった場合は、
qualified importが必要になります。
その時のエイリアス規約の一部(himariのhlintルール由来)は以下の通りです。
Data.ByteString → qualified as B
Data.Text → qualified as T
Data.Map.Strict → qualified as Map
Data.List → qualified as L
関連するhaskell-tasukeスキル
himari利用時も以下のhaskell-tasukeスキルの方針が当てはまります。