Yesod Forms或JSON / Ajax或其他

时间:2013-09-21 05:45:26

标签: haskell yesod aeson

我正在为基于Yesod的网站编写CRUD界面,但我遇到了一些问题。特别是,我正在尝试对以下值进行CRUD:

data Value = Value { valueId :: UUID
                   , otherStuff :: Stuff
                   }

我很难找到使用Yesod和Aeson提供的工具创建其中一个的好方法。当我使用formlet时,在遥远的过去,我会使用monad变换器版本的表单来做一些事情:

Value <$> (liftIO getUUID)
      <*> textField Nothing

(我可能没有得到完全正确的formlets语法,但希望Haskellers在那里获得要点)。这样做的结果是制作了一个不包含UUID字段的表单和一个运行IO操作以在后期制作数据的表单解析器。

我不知道该怎么办。我认为使用Aeson解析时也有同样的想法,但attoparsec(底层解析器)也不是monad转换器。

除了拥有中间数据表示之外,还有人能想到更多的选择吗?

1 个答案:

答案 0 :(得分:2)

如果您要做的是在Applicative表单中调用IO操作,可以使用一个技巧:

lift (liftIO action)

问题是Applicative不能是MonadIO的实例,但它可以是MonadTrans的实例。