blog.anqou.net
rss
author
tags

#ocaml

nix-direnv で flake.nix 以外のファイルの編集でも dev shell を更新する

2026-06-22

nix-direnv を使って .envrc に以下のように書くと: use flake flake.nix に定義した dev shell の環境が手元に展開されてコマンドなどが使えるようになる上に、 flake.nix を編集すると nix 式の再評価が自動的に走って dev shell の環… Read more.

OCaml のエフェクトハンドラ内で起こる例外を呼び出し元に返却する

2026-06-09

OCaml 5.0 から導入されたエフェクトハンドラを用いると、従来は難しかったような柔軟な処理を実現できます。例えば以下のような Foo というエフェクトを定義すると: type _ Effect.t += Foo : int Effect.t 以下のように使えば 1, 2, 3 の順で処理が行… Read more.

opam-nix で custom repository を使う

2026-06-08

OCaml のパッケージマネージャーである OPAM でサードパーティーのパッケージをインストールする場合、通常は opam-repository からパッケージをダウンロードします。しかし opam-repository にないパッケージや、自分でパッチを当てたパッケージなどを使用したい場合、 O… Read more.

match ... with の腕で例外を捕捉する

2026-05-30

OCaml で関数 f を実行した後に、これが成功した場合はその結果を別の関数 g に渡し、例外を送出した場合はそれを捕捉した上でさらに別の関数 h に渡したい、というような状況があります。 教科書的には、例外の捕捉は try ... with を使って行いますが、このようなケースでは少々不便です:… Read more.

OCaml で警告を抑制する

2026-05-29

Dune を用いて OCaml コードをコンパイルすると、デフォルトで様々な警告が有効化されます。例えば使用していない変数には warning 26 が発報します: File "backend/bin/main.ml", line 14, characters 6-10: 14 | let ho… Read more.

ocamlformat を一部で無効化する

2026-05-23

ocamlformat は OCaml のデファクトスタンダードのフォーマッターです。 ocaml-lsp などを使用して OCaml ファイルを保存するときに勝手に ocamlformat のフォーマットが入るようにしておくと、適当なインデントで式を書いても強力にフォーマットしてくれるので非常に便… Read more.

OCaml で uunf を使い Unicode 正規化する

2026-05-21

一昨日の記事では Camomile を使って Unicode 正規化を行ったのですが、この方法を用いたソフトウェアで opam-nix を使って Docker イメージを作成するとイメージサイズが膨れ上がってしまうことが分かりました[1]。 そこで別の選択肢である uunf を使い Unicode … Read more.

OCaml で Camomile を使って文字コードを変換

2026-05-20

昨日の記事では Camomile を使い Unicode 正規化を行いました。 Camomile はリッチなライブラリで、文字コードの変換も行うことができます。 使うモジュールは Camomile.CharEncoding です。of_name を使ってエンコーディングを取得し、それを recode… Read more.

OCaml で Camomile を使い NFKC で Unicode 正規化

2026-05-19

日本語の全角・半角を気にせずに文字列検索を行いたい場合、扱う対象が Unicode なら Unicode 正規化を行うのが一般的らしいです。正規化にも色々種類があるそうなのですが、インターネットを放浪した限りだと NFKC(Normalization Form Compatibility Compo… Read more.

ocaml-opentelemetry で attribute つきのメトリクスを出す

2026-05-17

以前の記事で紹介したとおり ocaml-opentelemetry を使うと OCaml で OpenTelemetry のメトリクスを出力することができます。 OpenTelemetry ではメトリクスに attribute を付与することができ[1]、Prometheus のラベルのように使えま… Read more.

OCaml の Eio の Io エラーを捕捉する

2026-05-14

Eio は、OCaml 5 から追加された effect handler を活用した非同期処理のためのフレームワークです。Eio を介して IO を行う場合、その IO が失敗した場合に注意を払う必要があります。Eio では Eio.Io という例外が定義されており、これを送出することで IO エラ… Read more.

OCaml で OpenTelemetry を Eio で使う

2026-05-08

ocaml-opentelemetry を使うと OCaml で OpenTelemetry によってトレース・メトリクス・ログを出力することができます。この記事ではこのうち、トレースとメトリクスを出力してみます。非同期処理のフレームワークとして Eio を使用します。なお ocaml-opente… Read more.

OCaml の Eio を使って外部コマンドをパイプでつなぎ出力を得る

2026-04-28

Eio(ocaml-multicore/eio) は OCaml で非同期処理を行うためのフレームワークです。古くからある Lwt や Async とは異なり OCaml 5.0 で導入された algebraic effect を使っているため、direct style で非同期 I/O の処理を記… Read more.

OCaml のコメントで文字列リテラルを閉じないと文法エラー

2026-04-26

多くのプログラミング言語で、コメントには(コメント終端記号以外の)任意の文字列を書くことができます。 しかし実は OCaml にはコメントの中にかける文字列に制約があります。具体的には、文字列リテラル("...")を書く場合、必ずそのリテラルがトークンとして妥当でなければなりません。言い方を変えると… Read more.

Dune ファイルを OCaml で動的に生成する

2026-04-24

Dune は OCaml 用のビルドシステムで、現在のデファクトスタンダードです。Dune の設定ファイルは dune というファイル名で配置され、中には S 式を書くことになっています。Dune の設定は結構リッチな仕様になっていて、enabled_if などを使い条件を指定することもできます。以… Read more.

OCaml で let*Result.bind にして便利に使う

2026-04-19

OCaml 4.08 から binding operator が導入され let* などが定義できるようになりました: let foo x f = (* なんやかんや *) let (let*) = foo let _ = let* x = call_something hoge in … Read more.