Hi guys,
As I said in another thread, I've been debugging a yesod application single stepping through one of the handlers. I'm using ghci built in debugger and it's pretty good, but I always fail to set the breakpoint in the right scope where I can evaluate the stuff I'm interested in learning more about.
For instance, in the following code I would like to set the debugger on the line before "mv <- maybeAuth", in order to :force the values of (uid, u). But even when I set it at the beginnig of the 'mv' line, the scope ends up being the entire do block. Which makes sense, but doesn't helpe me solve my problem :)
getUserR :: String -> Handler RepHtmlJson
getUserR input = do
(uid, u) <-
case readIntegral input of
Just uid -> debugRunDB $ do
u <- get404 uid
mun <- getBy $ UniqueUsernameUser uid
case mun of
Nothing -> return (uid, u)
Just (_, Username _ un) ->
lift $ redirect RedirectPermanent $ UserR un
Nothing -> debugRunDB $ do
mun <- getBy $ UniqueUsername input
case mun of
Nothing -> lift notFound
Just (_, Username uid _) -> do
u <- get404 uid
return (uid, u)
mv <- maybeAuth
Maybe the problem is that I'm thinking in a too procedural fashion about do blocks, or that evaluating those results is kind of paranoid. I'm too spoiled by REPL's, I would even like to be able to use a REPL that runs inside runDB for querying models and doing stuff with them interactively.
How do you debug your yesod apps? am I drifting too far away from the haskell way?
thanks in advance for your comments :)
cheers
----nubis