Формы для вложенных структур в yesod - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть следующие типы:

data Cheese = Cheddar Int | Edam String String | Cottage String Int

data Meal = Meal {
      nameOfMeal :: String,
      ... other generic fields
      cheese :: Cheese
}

В настоящее время мои формы выглядят так:

cheddarForm = renderTable $ construct 
             <$> areq textField "Name of meal" Nothing
             <*> areq intField "Cheddar fat" Nothing
      where 
          construct name fat = Meal name (Cheddar fat)

В настоящее время я весьма доволен тем фактом, что мне нужна одна форма для каждого типа «сыра» (хотя я, конечно, не возражаю против наличия динамической формы…). Тем не менее, я бы очень хотел избавиться от повторения «Название еды» в каждой форме. Могу ли я как-то объединить формы, или я должен в конечном итоге перейти на монадические формы?

1 Ответ

3 голосов
/ 12 февраля 2012

Не могли бы вы просто пройти мимо

conWithNOM ctr = ctr
    <$> areq textField "Name of meal" Nothing

и назовите это против других полей формы?

cheddarForm = renderTable $ conWithNOM construct
    <*> areq intField "Cheddar fat" Nothing
  where 
      construct name fat = Meal name (Cheddar fat)
...