himarilisted
Install: claude install-skill ncaq/konoka
# himari
[himari](https://github.com/ncaq/himari)は、
ncaqが作成した、
[rio](https://hackage.haskell.org/package/rio)
の思想を受け継ぎつつ改良したカスタムPreludeライブラリです。
- リポジトリ: <https://github.com/ncaq/himari>
- Hackage: <https://hackage.haskell.org/package/himari>
himariに依存するプロジェクトでは、
`NoImplicitPrelude`が有効になっており、
標準のPreludeの代わりにhimariを使います。
## import は `import Himari` の1行だけ
himariを使うモジュールでは、
原則として以下の1行だけをimportします。
```haskell
import Himari
```
`Himari`モジュールが以下を全て再exportするエントリポイントだからです。
- `Himari.Char`
- `Himari.Env`
- `Himari.Env.Simple`
- `Himari.Logger`
- `Himari.Prelude`
## `import Himari.Prelude` を直接書かない
`Himari.Prelude`などのサブモジュールを直接importするのは間違いです。
```haskell
-- 間違い: サブモジュールを直接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](https://academy.fpblock.com/blog/2017/06/readert-design-pattern/)パターンの、
支援モナドと例えば以下の関数:
- `newtype Himari env a = Himari { unHimari :: ReaderT env IO a }`
- `runHimari :: (MonadIO m) => env -> Himari env a -> m a`
- 文字列・コンテナ型、例えば以下:
- `ByteString`
- `HashMap`
- `Map`
- `NonEmpty`
- `