himari: A standard library for Haskell as an alternative to rio

[ apache, control, library, program ] [ Propose Tags ] [ Report a vulnerability ]

A standard library for Haskell inspired by rio. Unlike rio, himari uses the full lens library instead of microlens, and provides hlint rules to warn against partial functions instead of providing safe wrapper modules. See the README at https://github.com/ncaq/himari#readme for more information.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 1.0.0.1, 1.0.0.2, 1.0.1.0, 1.0.2.0, 1.0.3.0, 1.0.3.1, 1.0.3.2, 1.0.4.0, 1.0.5.0, 1.1.0.0, 1.1.1.0
Change log CHANGELOG.md
Dependencies aeson (>=2.2.3.0 && <2.3), aeson-pretty (>=0.8.10 && <0.9), base (>=4.19.2.0 && <4.23), bytestring (>=0.12.2.0 && <0.13), containers (>=0.7 && <0.8), convertible (>=1.1.1.1 && <1.2), data-default (>=0.8.0.2 && <0.9), deepseq (>=1.5.0.0 && <1.6), deriving-aeson (>=0.2.10 && <0.3), exceptions (>=0.10.9 && <0.11), filepath (>=1.5.4.0 && <1.6), hashable (>=1.5.0.0 && <1.6), himari, lens (>=5.3.5 && <5.4), monad-logger (>=0.3.42 && <0.4), mtl (>=2.3.1 && <2.4), pretty-simple (>=4.1.3 && <4.2), primitive (>=0.9.1.0 && <0.10), retry (>=0.9.3.1 && <0.10), safe (>=0.3.21 && <0.4), text (>=2.1.2 && <2.2), time (>=1.12.2 && <1.13), typed-process (>=0.2.13.0 && <0.3), unliftio (>=0.2.25.1 && <0.3), unordered-containers (>=0.2.20 && <0.3), vector (>=0.13.2.0 && <0.14) [details]
Tested with ghc ==9.10.2, ghc ==9.10.3, ghc ==9.12.2, ghc ==9.14.1
License Apache-2.0
Copyright ncaq
Author ncaq
Maintainer ncaq@ncaq.net
Uploaded by ncaq at 2026-05-24T03:59:37Z
Category Control
Home page https://github.com/ncaq/himari
Bug tracker https://github.com/ncaq/himari/issues
Source repo head: git clone https://github.com/ncaq/himari.git
Distributions
Executables anomaly-monitor
Downloads 120 total (28 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for himari-1.1.1.0

[back to package description]

himari

CI License

Haskell Hackage Haddock

Linux macOS Windows

A standard library for Haskell to replace rio

このプロジェクトは、 commercialhaskell/rio: A standard library for Haskell の思想を踏襲しつつ、 よりスムーズな開発が出来ることを目指した改良ライブラリです。

背景

私はrioの思想が好みで長く使っています。

しかしrioの好みではない点もいくつかあります。 単純に質の問題であれば私がコントリビュートすれば良いのですが、 非互換な選択である部分が多いため、 それは受け入れられないだろうと考えて、 rioに似たライブラリであるhimariを作成することにしました。

目標

依存関係が大きくなることを恐れない

例えばrioは依存関係を小さくしようと考えているのか、 lensではなく、 microlensを採用しています。

しかし実際のライブラリでは本家のlensに依存していることも多いです。 開発でも実際のlensを使いたいです。 その結果コンフリクトすることが多発します。

Haskellは静的にビルドする言語なので、 依存関係が多いことはあまり怖くありません。

ビルドした時に使わないデッドコードはコンパイラが勝手に消してくれます。

他にも使うとは限らない依存関係もドシドシimportしてしまいます。

バージョンごとの依存関係の解決が大変なのは、 Nixなどのパッケージマネージャのレイヤーで解決することにします。

なるべくimportを一行で済ませることを目指します

himariは基本的には以下の一行で代替Preludeを提供することを目指します。

import Himari

色々と書くのは面倒なので。 衝突しない範囲で大量にimportしてしまいます。

同じシンボル名をexportしていて衝突してしまうものは仕方がないので、 qualified importを使ってもらいます。

なるべく独自のシンボルを定義しない

himariはrioで言うRIO.Textのような独自のシンボルを定義することをなるべく避けます。 開発メンバーやコーディングエージェントに独自のシンボルを使うことを守ってもらうのが難しいからです。 しばしばオリジナルのシンボルをimportしてしまい、 コードレビューなどで手戻りが発生します。

ただしHimari.Preludeのサブモジュールは存在します。 Himari.Prelude.Aesonなどのシンボルです。 これはHaddockの制限により、 hidingを使ったre-exportはシンボルが全て展開されてしまうからです。 シンボルの展開が発生するとドキュメントが肥大化してしまいます。 サブモジュールでhidingを隠蔽することで、 Himari.Preludeのドキュメントをコンパクトに保っています。

これらのサブモジュールはHimari.Preludeから自動的にre-exportされるため、 rioのRIO.Textのように個別にimportする必要はありません。 ユーザから見ると直接扱う必要は基本的にないということです。

万が一誤ってサブモジュールを直接importした場合でも、 Himari.Preludeと重複importすることになり、 GHCが警告を出してくれるので、 気が付きやすいです。

セットアップ

himariを使うプロジェクトでは、 以下の設定ファイルをセットアップすることを強く推奨します。

hlint

himariは部分関数を除去する代わりに、 hlintで警告を出すことで対処しています。 プロジェクトルートにある.hlint.yamlファイルをコピーしてください。 既存のhlint.yamlがある場合はマージしてください。

curl -L 'https://raw.githubusercontent.com/ncaq/himari/master/.hlint.yaml' -o '.hlint.yaml'

fourmolu

fourmoluはHaskellのフォーマッタです。 fourmoluは演算子の優先順位(fixity)を正しく解決するために、 カスタムPreludeがどのモジュールをre-exportしているかを知る必要があります。

プロジェクトルートにある、 fourmolu.yamlファイルの、 reexportsセクションをコピーしてください。 既存のfourmolu.yamlがある場合はreexportsセクションをマージしてください。

curl -L 'https://raw.githubusercontent.com/ncaq/himari/master/fourmolu.yaml' -o 'fourmolu.yaml'

[!NOTE] fourmolu.yamlにはhimari固有のフォーマット設定(indentation, column-limitなど)も含まれています。 素朴な設定ですが、プロジェクトに合わせて適宜変更してください。

AIエージェント向けのプラグイン

himariとAIエージェントを組み合わせて開発する時には、 ncaq/konoka: AI prompts, agents, and skills as loadable plugins. というマーケットプレイスで開発している、 haskell-tasukeプラグイン を利用することを強く推奨します。

セットアップ方法はリポジトリにあるREADMEを参照してください。

konokaリポジトリのREADMEに従ってマーケットプレイスを追加し、 その後haskell-tasukeプラグインのREADMEに従ってインストールしてください。

一般的なHaskellの開発にも役立つプラグインにしていますが、 特にhimariを利用するのにフィットするようになっています。

現在はClaude Codeでのみ動作確認をしています。

注意

[!IMPORTANT] himariはrioとは完全に同じように使えるわけではありません。 ここで主な注意点を挙げます。

重大なランタイムの非互換性

ログの出力先の変更

rioは基本的に標準出力にログを出力しますが、 himariはデフォルトのセットアップ手順に従うと標準エラー出力にログを出力します。

ログは標準エラー出力に出すべきだと考えているためです。

変更したい時は出力先をstderrからstdoutなどに変更することで簡単に変更可能です。

部分関数への対処方法の違い

rioは部分関数を独自のモジュールでexportして提供していますが、 himariはそのままオリジナルのモジュールを使う方針です。

よってhimariは部分関数を除去していません。

なのでhimariはhlintのルールで警告を出すことで対処しています。 詳細はセットアップを参照してください。

Nix

このプロジェクトは開発環境として、 haskell.nix を使用しています。

あくまで開発環境として利用しているだけなので、 himariを使うのにnixを利用する必要はありません。

nix flake showが失敗する場合

haskell.nixはIFD(Import From Derivation)を使用するため、 複数システムをサポートするflakeでnix flake showを実行すると、 異なるシステム向けのビルドを評価しようとして失敗することがあります。

これはhaskell.nixの既知の制限であり、 現在のところ完全な回避策はありません。