<div dir="ltr"><div>Hi,</div><div><br></div><div>I'll worry about the learning curve of beginners.</div><div>Maybe, beginners will try following session in their 1st week.</div><div><br></div><div>  ghci> :t foldr</div><div>  ghci> :t ($)</div><div><br></div><div>They'll get following result.</div><div><br></div><div><br></div><div>Before ghc7.8:</div><div><br></div><div>  Prelude> :t foldr</div><div>  foldr :: (a -> b -> b) -> b -> [a] -> b</div><div><br></div><div>  Prelude> :t ($)</div><div>  ($) :: (a -> b) -> a -> b</div><div><br></div><div>  Beginners should only understand about following:</div><div><br></div><div>    * type variable (polymorphism)</div><div><br></div><div><br></div><div>After ghc8.0:</div><div><br></div><div>  Prelude> :t foldr</div><div>  foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b</div><div><br></div><div>  Prelude> :t ($)</div><div>  ($)</div><div>    :: forall (w :: GHC.Types.Levity) a (b :: TYPE w).</div><div>       (a -> b) -> a -> b</div><div><br></div><div>  Beginners should understand about following things, more:</div><div><br></div><div>    * higher order polymorphism (t m)</div><div>    * type class (class t =>)</div><div>    * universal quantification (forall)</div><div>    * kind (type::kind)</div><div>    * levity (lifted/unlifted)</div><div><br></div><div>I think it's harder in their 1st week.</div><div>I tried to draw informal illustrations about Foldable,</div><div>but beginners may need ghci-beginner’s mode or something?</div><div><br></div><div>Sorry I don't still have good idea.</div><div><br></div><div>Of course I like Haskell's abstraction :)</div><div><br></div><div>Regards,</div><div>Takenobu</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-02-05 18:19 GMT+09:00 Joachim Breitner <span dir="ltr"><<a href="mailto:mail@joachim-breitner.de" target="_blank">mail@joachim-breitner.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
Am Freitag, den 05.02.2016, 09:22 +0200 schrieb Roman Cheplyaka:<br>
> On 02/05/2016 01:31 AM, Edward Z. Yang wrote:<br>
> > I'm not really sure how you would change the type of 'id' based on<br>
> > a language pragma.<br>
> ><br>
> > How do people feel about a cosmetic fix, where we introduce a new<br>
> > pragma, {-# LANGUAGE ShowLevity #-} which controls the display of<br>
> > levity<br>
> > arguments/TYPE.  It's off by default but gets turned on by some<br>
> > extensions like MagicHash (i.e. we only show levity if you have<br>
> > enabled extensions where the distinction matters).<br>
><br>
> Yes, I am surprised this isn't the way it's been done. The levity<br>
> arguments should totally be hidden unless requested explicitly.<br>
><br>
> I'd only expect this to be a ghc flag (-fshow-levity), not a language<br>
> pragma, since it should only affect the way types are /shown/.<br>
<br>
</span>shouldn’t this already happen, based on -fprint-explicit-kinds? At<br>
least I would have expected this.<br>
<br>
So we probably either want to make sure that -fno-print-explicit-kinds<br>
also prevents forall’ed kind variables, or add a new flag of that (heh)<br>
kind.<br>
<br>
Greetings,<br>
Joachim<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Joachim “nomeata” Breitner<br>
  <a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a> • <a href="http://www.joachim-breitner.de/" rel="noreferrer" target="_blank">http://www.joachim-breitner.de/</a><br>
  Jabber: <a href="mailto:nomeata@joachim-breitner.de">nomeata@joachim-breitner.de</a>  • GPG-Key: 0xF0FBF51F<br>
  Debian Developer: <a href="mailto:nomeata@debian.org">nomeata@debian.org</a><br>
<br>
</font></span><br>_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
<br></blockquote></div><br></div>