generated at
鉄道指向プログラミング
HaskellでいうEither型、並びにEitherモナドを使ったプログラミングのことをこの記事がそう呼んでいる

Eitherモナドを知っている人からすると復習になる
Either型やEitherモナドのことを知らない人が読むと学びがありそう
Monadを知らない人に対する具体例から理解するモナドの解説としても有用な気がする
Monadという単語を一切使わずに具体例から徐々に抽象化していく感じで解説が進むのが良い
HaskellやPureScriptやF#などの演算子オーバーロードがある言語で試してみるとより良さそう
TypeScriptではそこまでキレイに書けない気がする
同じようなことはできる


Haskellでかいてみる ref
この部分を同じレイアウトで書こうとするとこんな感じになる
>>>Control.Arrowのもの
逆向きの関数合成として使っている
hs
usecase :: Request -> Either Text Request usecase = validate1 >=> validate2 >=> validate3 >>> fmap coanonicalizeEmail
hs
-- こう書いても同じ usecase = validate1 >=> validate2 >=> validate3 >=> Right . coanonicalizeEmail
ちなみにこう書くのは間違い
hs
usecase :: Request -> Either Text Request usecase = do validate1 validate2 validate3
これは3つのvalidateを独立で行っている
今回のケースではこれでも問題ない
もし validate1 Right の結果を返す時に何かしら文字列を操作された場合は結果が変わる
例えば Right $ toLower r と書いてたりすると変わる


参考
最後の方、Arrowの話をしているみたいになっているなmrsekut