Формы для вложенных структур в yesod

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

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)

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


person ondra    schedule 25.11.2011    source источник


Ответы (1)


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

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)
person Khanzor    schedule 12.02.2012