I was reading the explanation of <a href="http://en.wikibooks.org/wiki/Haskell/GADT">GADTs on the wiki</a> , and but can&#39;t make any sense of the examples.<div><br></div><div>Sure I understand what a GADT is, but I&#39;m looking for practical examples, and the ones on the wiki seem to show what you *cannot* do with them...</div>
<div><br></div><div>For example, the article gives an alternative approach to the safeHead function (see code below)</div><div><br></div><div>But now that does not work either, since Cons x y never evaluates to MarkedList x Safe, so safeHead (Cons 1 Nil) will give a type error...</div>
<div><br></div><div>Am I missing something or is this wikibook just confusing?</div><div><br></div><div>Does anybody have good links to examples of GADTs? </div><div><br></div><div>Yampa surely seems a good example, but it&#39;s a bit too advanced. </div>
<div><br></div><div><span class="Apple-style-span" style="font-family: -webkit-sans-serif; font-size: 18px; line-height: 27px; "><pre style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(47, 111, 171); border-right-color: rgb(47, 111, 171); border-bottom-color: rgb(47, 111, 171); border-left-color: rgb(47, 111, 171); color: black; background-color: rgb(249, 249, 249); line-height: 1.1em; ">
<span class="Apple-style-span" style="font-size: small;">data NotSafe
data Safe


data MarkedList             ::  * -&gt; * -&gt; * where
  Nil                       ::  MarkedList t NotSafe
  Cons                      ::  t -&gt; MarkedList t y -&gt; MarkedList t z


safeHead                    ::  MarkedList x Safe -&gt; x
safeHead (Cons x _)          =  x


silly 0                      =  Nil
silly 1                      =  Cons () Nil
silly n                      =  Cons () $ silly (n-1)</span></pre></span></div>