Hello cafe,
I have a custom data type:
data Foo = Foo | Bar | Baz
deriving (Show, Bounded, Enum)
In my yesod app I need to have two forms, one that get two Foo and a second that recieve three Foo. From What I've seen online I need to create two new data types:
data Foo2 = { foo1 :: Foo, foo2 :: Foo }
data Foo3 = { foo1 :: Foo, foo2 :: Foo, foo3 :: Foo }
This is tedious and very much ad-hoc. In my actual app it goes up to Foo6 :( Is there a better way to do it?
This is how I defined the forms:
foo2AForm :: AForm Handler Foo2
foo2AForm = Foo2
<$> areq (selectFieldList foos) "foo1" Nothing
<*> areq (selectFieldList foos) "foo2" Nothing
where
foos:: [(Text, Role)]
foos= map (pack . show &&& id) [minBound..]
foo2Form :: Html -> MForm Handler (FormResult Foo2, Widget)
foo2Form = renderTable teamAForm
foo3AForm :: AForm Handler Foo3
foo3AForm = Foo3
<$> areq (selectFieldList foos) "foo1" Nothing
<*> areq (selectFieldList foos) "foo2" Nothing <*> areq (selectFieldList foos) "foo3" Nothing where
foos:: [(Text, Role)]
foos= map (pack . show &&& id) [minBound..]
foo3Form :: Html -> MForm Handler (FormResult Foo2, Widget)
foo3Form = renderTable teamAForm
Thanks