Haskell 哈斯克尔公司;Snap:每个请求的瞬态状态

Haskell 哈斯克尔公司;Snap:每个请求的瞬态状态,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,如何在Snap中设置每个请求的瞬态 看着它说 处理程序bv有一个MonadState v实例。这意味着您可以通过get、put、get和modify函数访问所有snaplet状态,这些函数可能是state monad中熟悉的 因此,我尝试以下方法: data App = App { _test :: Int } 然后在处理程序中: someHandler :: Handler App App () someHandler = do test <- gets _te

如何在Snap中设置每个请求的瞬态

看着它说

处理程序bv有一个MonadState v实例。这意味着您可以通过get、put、get和modify函数访问所有snaplet状态,这些函数可能是state monad中熟悉的

因此,我尝试以下方法:

data App = App
    { _test :: Int
    }
然后在处理程序中:

someHandler :: Handler App App ()
someHandler = do
    test <- gets _test
    liftIO $ print test
    put ( 2 :: Int _test
someHandler::Handler应用程序()
someHandler=do

test
put
接受一个参数,但你给了它两个(错误清楚地说明了这一点——“函数‘put’应用于两个参数”——你读过了吗?)。你可能想要
放置(App{u test=2})
,或者使用lents.wow。就这么简单。万分感谢!是的,我读了警告,但根本没注意。我专注于第一部分。我保证,我并没有表面上看起来那么愚蠢:D
put
接受一个参数,但你给它两个(错误明确说明了这一点——“函数‘put’应用于两个参数”——你读过吗?)。你可能想要
放置(App{u test=2})
,或者使用lents.wow。就这么简单。万分感谢!是的,我读了警告,但根本没注意。我专注于第一部分。我保证,我并不像看上去那么愚蠢:D
• Couldn't match type ‘()’ with ‘Handler App App a0’
  Expected type: (App -> Int) -> Handler App App a0
    Actual type: (App -> Int) -> ()
• The function ‘put’ is applied to two arguments,
  its type is ‘s0 -> m0 ()’,
  it is specialized to ‘Int -> (App -> Int) -> ()’
  In a stmt of a 'do' block: put (2 :: Int) _test
  In the expression:
    do { test <- gets _test;
         liftIO $ print test;
         put (2 :: Int) _test;