Use the latest version of Shpadoinkle-continuations
Usage examples for some of the new constructs:
handleLogin = kleisliT $ \(z, LoginV u p) -> do
h <- lift (liftJSM (hash p))
commit . pur . second . const $ LoginV "" ""
res <- lift $ login (UserId u) h
case res of
Just s -> do
commit . pur . first $ \z' -> z' { session = Just s }
commit . kleisliT $ \(z',v) -> do
lift $ setStorage "session" (sessionId s)
lift $ navigate @SPA InitialRoute
z'' <- lift . getDatabase $ sessionId s
commit . pur . first $ const z''
lift $ navigate @SPA InitialRoute
Nothing -> return () -- TODO: show message saying login failed
reload = kleisli $ \(z,_) ->
case session z of
Just s -> do
z' <- getDatabase (sessionId s)
return . pur $ const (z', initialViewModel z')
Nothing -> return (pur id)
Edited by Morgan Thomas