[Haskell-beginners] Type constructors sharing a common field
John M. Dlugosz
ngnr63q02 at sneakemail.com
Wed Apr 30 14:54:27 UTC 2014
On 4/29/2014 12:42 AM, Lorenzo Tabacchini wrote:
>> Yes, there is:
>>
>> data Person = Child { personAge :: Int, school :: School }
>> | Adult { personAge :: Int, job :: Job }
>>
>>
>> No extension needed!
>
>
> Thanks!
> This helps reduce the number of field names, but it does not address the main problem,
> which is the obligation of pattern matching on all constructors.
> The Person type is just a simple example. If you have a lot of constructors repeating all
> of them without a real reason can be time-consuming and boring.
>
> I am aware that the real reason of the problem may be a wrong architecture, but I still
> have the feeling that my solution does have some use cases.
>
That reminds me of database design: Normalize! In this case, Daniel's suggestion is in
line with the theory. With varying numbers of fields between the different kinds of
people, it suggests making separate tables and joining them to produce the child or adult
views.
More generally, perhaps database schema rather than Object Oriented is a better place to
transfer engineering skills from when it comes to designing the information model.
—John
More information about the Beginners
mailing list