data families syntax

Harendra Kumar harendra.kumar at gmail.com
Sun Nov 13 12:01:34 UTC 2016


Answering my own question, which means I did not do enough research before
asking. I found two points that I missed earlier:

1) data families are open in contrast to value level functions i.e. you can
add more instances later on hence the family and instance keywords make
sense.

2) the syntax 'data family List :: * -> *' is actually already supported as
an alternative.

-harendra


On 13 November 2016 at 16:10, Harendra Kumar <harendra.kumar at gmail.com>
wrote:

> I am curious about why the data families syntax was chosen to be the way
> it is. For example a list can be defined as follows:
>
> data family List a
>
> data instance List Char = Empty | Cons Char (List Char)
>
> data instance List ()   = Count Int
>
>
> Instead why not define it as:
>
> data List :: * -> *
>
> data List Char = Empty | Cons Char (List Char)
>
> data List ()   = Count Int
>
>
> The latter form looks more intuitive and easy to remember to me since it
> is very similar to the way value level functions are defined (signature &
> pattern matching defs). Here we are just defining a type level function
> instead.
>
> -harendra
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20161113/bff77a1f/attachment.html>


More information about the ghc-devs mailing list