1

Yesod ベースのサイト用に CRUD インターフェースを書いていますが、いくつかの値に問題があります。特に、次のような値で CRUD を試みています。

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

Yesod と Aeson が提供するツールを使用してこれらの 1 つを作成する良い方法を見つけるのに苦労しています。私がフォームレットを使用したとき、遠い昔、フォームのモナド変換バージョンを使用して、次の行に沿って何かを行いました。

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

(私はおそらくフォームレットの構文を正確に理解していませんが、そこにいる Haskeller が要点を理解していることを願っています)。これには、UUID フィールドを含まないフォームと、IO アクションを実行してポストタイムにデータを作成するフォーム パーサーを作成するという効果がありました。

どうすればよいかわかりません。私は Aeson 構文解析で同じような考えを考えましたが、attoparsec (基礎となるパーサー) もモナド変換子ではありません。

中間データ表現以外のオプションを考えられる人はいますか?

4

1 に答える 1

2

Applicative フォームで IO アクションを呼び出す場合は、次のトリックを使用できます。

lift (liftIO action)

問題は、Applicative を MonadIO のインスタンスにすることはできませんが、MonadTrans のインスタンスにすることはできます。

于 2013-09-22T04:24:35.730 に答える