m-matchの開発プロジェクト
m-matchというライブラリを作っている
モチベーション
ts-patternのwhenが欲しい
でもts-patternデカくね?  https://bundlephobia.com/package/ts-pattern@5.0.5
部分的にほしいが、メソッドチェーンスタイルだと欲しいところだけを取り出せないじゃん
pattern matchが欲しいのではなく、型安全なif thenの式だけがほしい
code:ts
if(isHoge(s)) {
return valueForHoge
else {
// ここでsはisHoge以外になってる
}
TSではtype guradがあるので、if文を書くと良い感じに型が分岐できるが、これを式にしたい。
matchしてたら何かを返して、matchしてなかったら入力を絞りたい
もしもAだったらX、そうでなければYをしたい、というのはdomain modeling made functionalでいうところのrailway oriented programmingにも出てくる
メソッドチェーンで登場する個別のパーツを分解して定義すると良いんじゃないの?
v0.0
とりあえずできたので書いた→m-match
検討メモ
現状これらしかない
match
when
reduceMatchers
exhaustive
reduceMatchers, 名前を簡単にしてreduceにしてもいいだろうか?
あるいは、matchの引数で配列を受け取って、それをreduceMatcher相当とするのもいいか
ts-patternのapiを真似ることも多分できるが
P.selectはちょっとむずいか
ts-patternのapiを見て、良いもの、真似るべきものとかを探してみよう
パターンマッチにおけるパターンの記述って、valibotとかzodのスキーマとやってること同じでは?
じゃあvalibotのschema使って実装したほうがシンプルだしきれいじゃん
schema.parseを渡すか、schema渡せるようにすればいいだけ
あとP.selectとかだけうまい方法を考えればts-patternを置換えられるんじゃないか
schemaに対して名前を付与できるようにして、parseの外側に名前の部分を取り出す仕組みを入れれば良い
todo
ちゃんとnpmいい感じにデプロイする
ちゃんとTSとしてジャンプするとソースが読めるやつとか
ビルド設定とか
これが欲しいユースケースを具体的なもの考えた方が良い
過去ログ
作成中のメモ:tsでmatch式をメソッドチェーンではなくモジュラーに実装したい