鉄道指向プログラミング
Eitherモナドを知っている人からすると復習になる
Either型やEitherモナドのことを知らない人が読むと学びがありそう
Monadという単語を一切使わずに具体例から徐々に抽象化していく感じで解説が進むのが良い
HaskellやPureScriptやF#などの演算子オーバーロードがある言語で試してみるとより良さそう
TypeScriptではそこまでキレイに書けない気がする
同じようなことはできる
この部分を同じレイアウトで書こうとするとこんな感じになる
hsusecase :: Request -> Either Text Request
usecase =
validate1
>=> validate2
>=> validate3
>>> fmap coanonicalizeEmail
hs-- こう書いても同じ
usecase =
validate1
>=> validate2
>=> validate3
>=> Right . coanonicalizeEmail
ちなみにこう書くのは間違い
hsusecase :: Request -> Either Text Request
usecase = do
validate1
validate2
validate3
これは3つのvalidateを独立で行っている
今回のケースではこれでも問題ない
もし validate1
の Right
の結果を返す時に何かしら文字列を操作された場合は結果が変わる
例えば Right $ toLower r
と書いてたりすると変わる
参考
最後の方、Arrowの話をしているみたいになっているな
