今回は Reader モナドに触れるということでモナドのすべての Reader モナドのページに載っているサンプルを Cats を使って実装してみた。 Cats を触り始めたばっかりなのでよりよい書き方があるかもしれないが、一旦動くところまで書けたのでコードだけ載せておく。
Cats MTL を使うともう少しわかりやすく書ける部分がありそうな気がしている。
Loading code...
Haskell のコードと比べると次の点が異なっていた。
- Haskell の
asks
が Scala ではReaderT.ask[Id, _].map(...)
asks
相当の関数は提供されていない(?)
- Haskell の
mapM
が Scala ではtraverse
- Prelude
Loading code...
- Traverse - cats-docs_2.13 2.12.0 javadoc
Loading code...
- Prelude
- 書き方がよくないのか Haskell のように型推論が上手く働かない 😢
働き始めてからこの手のコードを書く機会がまったく無くなってしまったので、手続き型でコードを書いた方がわかりやすいのはで?と思ってしまった。そのため、上記のコードと同じコードを Reader モナドを使わずに実装して比較してみようと思う。