2021-07-28: PFix 作ってた
やったこと
PFix
lite に lite-pfix というのを追加した。
https://github.com/MakeNowJust-Labo/lite/pull/27
これは部分的に定義された不動点コンビネータの PFix を提供するライブラリ。
f: (A => B) => PartialFunction[A, B] に対して PFix(f) で PFix[A, B] 型のオブジェクトが得られる。
PFix(f).toPartialFunction とすると f に f の戻り値自身が渡されるような挙動になる。
つまり PFix(f).toPartialFunction = f(PFix(f).toPartialFunction) というわけで、この意味で PFix は不動点コウンビネータにになっている。
一方、通常の不動点コンビネータと何が違うのかというと、PartialFunction のように orElse メソッドで合成できる。
例えば PFix(f).orElse(PFix(g)).toPartialFunction とすると、f と g にお互いの戻り値を orElse で合成した部分関数が渡ることになる。
あと toFunction では部分関数に処理されなかった場合のフォールバックを指定できて、PFix(f).orElse(PFix(g)).toFunction(h) とすると、f と g の戻り値を合成した部分関数にマッチしない場合には h で処理する関数が、f と g に渡ることとなる。
これの何が嬉しいのかというと、lite-show のオブジェクトを表示用のデータに変換する関数なんかは、再帰的に呼び出されても拡張可能にしたいという要求がある。
そういうときに便利、というかそれを一般化するために作った。