<div dir="auto">This is off-topic for this list. This list is for announcements. This belongs on <a href="mailto:haskell-cafe@haskell.org">haskell-cafe@haskell.org</a></div><div class="gmail_extra"><br><div class="gmail_quote">On Sep 1, 2017 11:05 AM, "Baa" <<a href="mailto:aquagnu@gmail.com">aquagnu@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">David, hello!<br>
<br>
1. Is it the same/different as:<br>
<br>
  data family Day a<br>
  data Sunny<br>
  data Rainy<br>
  data instance Day Sunny = SunnyDay deriving Show<br>
  data instance Day Rainy = RainyDay deriving Show<br>
<br>
  ..and here you can not create `Day Int` object because no `Day Int`<br>
  constructor (but you can create such constructor)<br>
<br>
? Or in case with type families there is possibility to extend it to<br>
`Day Int` and in case with DayaKinds it's totally impossible?<br>
<br>
2. I read somewhere (on forums) that restrictions on data types... I<br>
don't remember exactly, but something like they are not real<br>
restrictions or are related to old extension which is/will be<br>
deprecated. I'm not sure. Also, I'm not sure is it - in your example -<br>
restriction (constraint) or something else. Am I wrong?<br>
<br>
> This is maybe edging toward haskell-cafe territory, but you can<br>
> definitely do this in haskell.<br>
><br>
> {-# LANGUAGE DataKinds, KindSignatures #-}<br>
><br>
> data DayType = Sunny | Rainy<br>
><br>
> data Day (a :: DayType) = Day<br>
><br>
><br>
> sunnyDay :: Day Sunny<br>
> sunnyDay = Day<br>
><br>
> rainyDay :: Day Rainy<br>
> rainyDay = Day<br>
><br>
> -- impossibleDay :: Day ()<br>
> -- impossibleDay = Day<br>
><br>
> On Fri, Sep 1, 2017 at 10:18 AM, Baa <<a href="mailto:aquagnu@gmail.com">aquagnu@gmail.com</a>> wrote:<br>
> > Hello, List!<br>
> ><br>
> > For example, I have specialized (right nameis phantom?) type:<br>
> ><br>
> >   data Day a = Day { ... no `a` here }<br>
> >   data Sunny<br>
> >   data Rainy<br>
> ><br>
> >   joyToday :: Day Sunny -> IO ()<br>
> >   joyToday day = ...<br>
> ><br>
> >   melancholyToday :: Day Rainy -> IO ()<br>
> >   melancholyToday day = ...<br>
> ><br>
> > And I can create (in spite of that it's phantom) some day:<br>
> ><br>
> >   let day1 = Day {...} :: Day Sunny<br>
> >   joyToday day1<br>
> ><br>
> > but no problem to create `Day Int`, `Day Char`, etc which is<br>
> > pointless actually (sure "creator"-function can be exported from the<br>
> > module only, but I'm talking about type-level solution).<br>
> ><br>
> > I know that constraints (`... =>`) on data types are<br>
> > redundant/removed from the language. And I'm not sure how it's<br>
> > possible to restrict that parameter `a` (I know that it's possible<br>
> > to Java/C++/Perl6 (not sure), some other languages but how to add<br>
> > such restriction in Haskell? IMHO type families can help but I'm<br>
> > not sure how it will look (Sunny, Rainy are "nullary" type, so...).<br>
> ><br>
> > Is it possible for Haskell too?<br>
> ><br>
> > ===<br>
> > Best regards, Paul<br>
> > ______________________________<wbr>_________________<br>
> > Beginners mailing list<br>
> > <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
> > <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
> ______________________________<wbr>_________________<br>
> Beginners mailing list<br>
> <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
<br>
______________________________<wbr>_________________<br>
Haskell mailing list<br>
<a href="mailto:Haskell@haskell.org">Haskell@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell</a><br>
</blockquote></div></div>