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

Reply via email to