module Snap.Extension.Session (
MonadSession(..),
inSession,
withSession,
getFromSession,
deleteFromSession,
setInSession
) where
import Snap.Types
import Data.Map (Map)
import qualified Data.Map as M
class MonadSnap m => MonadSession m where
type Session m
getSession :: m (Session m)
setSession :: Session m -> m ()
clearSession :: m ()
touchSession :: m ()
inSession :: MonadSession m => m a -> m a
inSession handler = touchSession >> handler
withSession :: MonadSession m => (Session m -> m a) -> m a
withSession handler = touchSession >> getSession >>= handler
getFromSession :: (Ord k, MonadSession m, Session m ~ Map k a)
=> k -> m (Maybe a)
getFromSession key = fmap (M.lookup key) getSession
deleteFromSession :: (Ord k, MonadSession m, Session m ~ Map k a)
=> k -> m ()
deleteFromSession key = withSession $ setSession . M.delete key
setInSession :: (Ord k, MonadSession m, Session m ~ Map k a)
=> k -> a -> m ()
setInSession k v = withSession $ setSession . M.insert k v