質問Web, Scotty: connection pool as monad readerScottyT
では、モナドをスタックに埋め込んでReader
静的構成 (この場合は接続プール) にアクセスする方法が示されています。
同様の質問がありますが、もっと単純です – または、少なくとも私はそう思いました…</p>
アプリ全体ではなく、Reader
単一のハンドラー (つまり a ) に aを追加したい。ActionT
上記の質問からプログラムの変更を開始しましたが、必要なハンドラーに をActionT Text (ReaderT String IO)
変換する方法がわかりません。ActionT Text IO
これを構築する方法を知りたいと思って、手探りして型付きの穴を使用しようとした後、私は今のところあきらめて助けを求めなければなりません。これは単純であるべきだと本当に感じていますが、これを行う方法がわかりません。
これがプログラムです。私が立ち往生している行が強調表示されています。
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text.Lazy as T
import Data.Text.Lazy (Text)
import Control.Monad.Reader
import Web.Scotty.Trans
type ActionD = ActionT Text (ReaderT String IO)
main :: IO ()
main = do
scottyT 3000 id id app
-- Application
app :: ScottyT Text IO ()
app = do
get "/foo" $ do
h <- handler -- ?
runReaderT h "foo" -- ?
--get "/bar" $ do
-- h <- handler
-- runReaderT h "bar"
-- Route action handler
handler :: ActionD ()
handler = do
config <- lift ask
html $ T.pack $ show config