[web-devel] GGHandler and MonadPeelIO

Aur Saraf sonoflilit at gmail.com
Fri Apr 8 13:53:59 CEST 2011



runDB: need liftIOHandler

⁋For the impatient: stick liftIOHandler at the beginning of runDB like
so: runDB db = liftIOHandler $ fmap connPool getYesod >>=
Settings.runConnectionPool dbNo comments
Add a commentName:

⁋For everyone else: WAI 0.2 contained the request body as an
Enumerator in the Request datatype, and an Application was Request ->
IO Response. In WAI 0.3, an Application is Request -> Iteratee
ByteString IO Response. Long story short: all code in your Handler
function now lives on top of an Iteratee monad so that it can access
the request body.No comments
Add a commentName:

⁋This works great most of the time. The only downside is when you need
to deal with exceptions. It's impossible to define a MonadPeelIO
instance for Iteratee. Therefore, in Yesod 0.7, we have a new datatype
called GGHandler, which is just a generalization of GHandler to allow
an arbitrary inner monad.No comments
Add a commentName:

⁋GHandler defaults to having an Iteratee on the inside. But when you
need a MonadPeelIO (like we do in Persistent), you need to have an IO
on the inside. Eventually though, you'll need to convert your
GGHandler IO to a GHandler. That's what liftIOHandler does.No comments


Could anyone please explain this better, and what it means to someone
upgrading an application?

Specifically, what happens to:

    -- | A useful synonym; most of the DB handler functions are of this type
    type DB = SqlPersist Handler


Thanks :-),

More information about the web-devel mailing list