Я пытаюсь сделать глупый веб-сервер, который хранит данные как State
. Я использую Web.Scotty
. Раньше я использовал ReaderT со Скотти для доступа к 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