Currently SessionManager is an existential type that wraps around something that has an instance of ISessionManager. But no instances of ISessionManager are actually exposed, despite the docs linking to a "CookieSession", so it's the existential is a slightly more inefficient way of writing
data SessionManager r = SessionManager
{ load :: r -> Snap r
, commit :: r -> Snap ()
, ...
}
Currently SessionManager is an existential type that wraps around something that has an instance of ISessionManager. But no instances of ISessionManager are actually exposed, despite the docs linking to a "CookieSession", so it's the existential is a slightly more inefficient way of writing
But that isn't very satisfying either.