What about (Compose Form IO) Blog type? Form is Applicative, IO — the same, their composition should be Applicative as well (one good thing about Applicatives — they really compose). Take a look at Control.Compose module.
Отправлено с iPad > 01 окт. 2013 г., в 10:58, Michael Snoyman <mich...@snoyman.com> написал(а): > > I'm wondering if anyone's run into this problem before, and if there's a > common solution. > > In Yesod, we have applicative forms (based originally on formlets). These > forms are instances of Applicative, but not of Monad. Let's consider a > situation where we want to get some user input to fill out a blog post > datatype, which includes the current time: > > data Blog = Blog Title UTCTime Contents > > myBlogForm :: Form Blog > myBlogForm = Blog <$> titleForm <*> something <*> contentsForm > > The question is: what goes in something? Its type has to be: > > something :: Form UTCTime > > Ideally, I'd call getCurrentTime. The question is: how do I lift that into a > Form? Since Form is only an Applicative, not a Monad, I can't create a > MonadIO instance. However, Form is in fact built on top of IO[1]. And it's > possible to create a MonadTrans instance for Form, since it's entirely > possible to lift actions from the underlying functor/monad into Form. So > something can be written as: > > something = lift $ liftIO getCurrentTime > > This works, but is unintuitive. One solution would be to have an > ApplicativeIO typeclass and then use liftIOA. My questions here are: > > 1. Has anyone else run into this issue? > 2. Is there an existing solution out there? > > Michael > > [1] Full crazy definition is at: > http://haddocks.fpcomplete.com/fp/7.4.2/20130922-179/yesod-form/Yesod-Form-Types.html#t:AForm > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe