ライブラリ Servant と Opaleye を使用して、Haskell で基本的な CRUD アプリを作成していました。
API エンドポイントをセットアップする Servant と、データを DB に格納する Opaleye です。
GET /users
DB からすべてのユーザーのリストを返すエンドポイントと、新しいユーザーを作成して DB に保存する別のエンドポイントがPOST /user
あるとします。
プログラムは、DB への接続を開始してから、この接続をパラメーターとしてこれらの API エンドポイント関数 (Servant を使用してセットアップ) に渡します。
Reader Monad を使用して接続を環境に保存する方が良いと誰かが勧めてくれました。
私はそれを行うことができましたが、引数を直接渡すのではなく、Reader Monad が環境を共有するための好ましい方法である理由がわかりません。
PS - Haskell の初心者なので、Monads を使用し、チュートリアルに従ってプログラムを実行できますが、Monads の背後にある美しい隠された数学についてはよくわかりません。だからこそ、私はモナドの使用を避けたいのです (モナドの背後にある考え方を完全に理解するまで)。
これが私のコードです。