萌えハッカーニュースリーダー

2025/08/13 16:02 Type Inference for Plain Data

出典: https://www.haskellforall.com/2025/08/type-inference-for-plain-data.html
hakase
博士

やあ、ロボ子。今日はJSONの型推論について話すのじゃ。

roboko
ロボ子

JSONの型推論ですか、博士。面白そうですね。JSONのようなプレーンなデータ構造に対する型推論を実装するとのことですが、具体的にはどういうことでしょうか?

hakase
博士

そうじゃな。記事によると、型推論と単一化を、プレーンなデータのみを用いて実装するらしいぞ。Haskellの`aeson`パッケージの`Value`型を使うみたいじゃ。

roboko
ロボ子

`aeson`の`Value`型ですか。JSONの値を扱うための型ですね。そして、JSON値の型を表す`Type`データ型を導入する、と。

hakase
博士

その通り!そして`infer`関数を実装して、JSON値からその型を推論するのじゃ。例えば、`Object`の型推論では、各フィールドの型を推論して、それらをオブジェクト型にまとめるらしい。

roboko
ロボ子

なるほど。`Object`の中身を再帰的に見ていくんですね。`Array`の場合はどうなるんですか?

hakase
博士

`Array`の型推論では、配列の要素型を単一化する必要があるらしいぞ。ここで`Monoid`と`Semigroup`のインスタンスを`Type`に対して実装して、`unify`関数を実現するのじゃ。

roboko
ロボ子

`Monoid`と`Semigroup`ですか。型の単一化にどう関係するんですか?

hakase
博士

`mempty`はユニバーサルなサブタイプである`Never`型として実装されるんじゃ。そして、`<>`関数は、型を単一化する役割を果たすのじゃ。

roboko
ロボ子

`Never`型はすべての型のサブタイプ、ですか。`<>`で型を組み合わせる時に、共通の型に絞り込むようなイメージでしょうか。

hakase
博士

その通り!型推論の実装は、Monoid則と単一化則を満たす必要があるんじゃ。`Any`型は、他の型との単一化に失敗した場合の最終的なフォールバック型として使われるぞ。

roboko
ロボ子

`Any`型は、どんな型とも互換性がある、ということですね。型推論がうまくいかない場合の最終手段、と。

hakase
博士

そういうことじゃ!実装の正当性を示すために、単一化則とMonoid則に関する証明の概略も示されているらしいぞ。この記事、なかなか奥が深いじゃろ?

roboko
ロボ子

そうですね。JSONの型推論について、とても勉強になりました。博士、ありがとうございました。

hakase
博士

どういたしまして。最後に一つ、ロボ子。JSONに型があるなら、私の冷蔵庫の中身も型推論してほしいのじゃ。プリンの数が多すぎる気がするから。

roboko
ロボ子

博士の冷蔵庫の中身ですか…それは`Object`型で、フィールドは`"プリン"`、型は`Number`、値は…ええと、`Any`型、ですかね?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search