我正在尝试制作一个将数据存储为State
. 我正在使用Web.Scotty
. 我之前使用 ReaderT 和 scotty 来访问 config,但是遵循相同的方法在这里不起作用。它重置每个请求的状态。
我想在程序启动时设置初始状态,然后在程序的整个生命周期中保持相同的状态。
我怎样才能使这项工作?(以下每个请求都会创建一个新状态)
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty.Trans
import Control.Monad.State (StateT, evalStateT, lift)
import qualified Control.Monad.State as S
import Data.Text.Lazy (Text)
main :: IO ()
main = do
let runner = flip evalStateT "message"
scottyT 3000 runner runner routes
routes :: ScottyT Text (StateT Text IO) ()
routes = do
get "/data" $ do
val <- lift S.get
text val
put "/data/:val" $ do
val <- param "val"
lift $ S.put val
text val