
On 14.08.2014 09:19, Tom Ellis wrote:
On Wed, Aug 13, 2014 at 05:21:28PM -0700, John Lato wrote:
On Wed, Aug 13, 2014 at 4:21 PM, Tom Ellis
data LineItem = LineItem { name :: Maybe String , quantity :: Maybe Quantity , price :: Maybe Price }
Rather than this definition, what about something like:
data LineItemF f = LineItem { name :: f String , quantity :: f Quantity , price :: f Price } It seems Wojtek already objected to this approach, though perhaps that objection could be overcome
Hmm, perhaps like this LineItemFi = LineItemFi { name :: StringFi , quantity :: QuantityFi , price :: PriceFi } data LineItemUi f = LineItemUi { name :: StringUi , quantity :: QuantityUi , price :: PriceUi } I mean 1:1 correspondence between leaf UI types that can be missing, validate lengths, etc. and final types that go to the backend. Maybe it would be possible to use type classes / families to have common arithmietics for calculating with both kinds of types. This does require TH or Generics, but it's fine. -- Wojtek