[Haskell-cafe] New type of ($) operator in GHC 8.0 is problematic

Kyle Hanson me at khanson.io
Fri Feb 5 17:55:08 UTC 2016

I am also happy the discussion was posted here. Although I don't teach
Haskell professionally, one of the things I loved to do was show people how
simple Haskell really was by inspecting types and slowly putting the puzzle
pieces together.

Summary of the problem for others:

>From *Takenobu Tani*

Before ghc7.8:

  Prelude> :t foldr
  foldr :: (a -> b -> b) -> b -> [a] -> b

  Prelude> :t ($)
  ($) :: (a -> b) -> a -> b

  Beginners should only understand about following:

    * type variable (polymorphism)

After ghc8.0:

  Prelude> :t foldr
  foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b

  Prelude> :t ($)
    :: forall (w :: GHC.Types.Levity) a (b :: TYPE w).
       (a -> b) -> a -> b

With this change it looks like I will no longer be able to keep `$` in my
toolbox since telling a beginner its "magic" goes against what I believe
Haskell is good at, being well defined and easy to understand (Not well
defined in terms of Types but well defined in terms of ability to precisely
and concisely explain and define whats going on).

It looks like where the discussion is going is to have these types show by
default but eventually have an Alternative prelude for beginners.

>From *Richard Eisenberg:*

- It's interesting that the solution to the two problems Takenobu
pulls out below (but others have hinted at in this thread) is by
having an alternate Prelude for beginners. I believe that having an
alternate beginners' Prelude is becoming essential. I know I'm not the
first one to suggest this, but a great many issues that teachers of
Haskell have raised with me and posts on this and other lists would be
solved by an alternate Prelude for beginners.

I don't like the idea of fragmenting Haskell into "beginners" and
"advanced" versions. Its hard enough to get people to believe Haskell is
easy. If they see that they aren't using the "real" prelude, Haskell will
still be this magic black box that is too abstract and difficult to
understand. If they have to use a "dumbed down" version of Haskell to
learn, its not as compelling.

There is something powerful about using the same idiomatic tools as the
"big boys" and have the tools still be able to be easy to understand.... by
default. Adding complexity to the default Haskell runs the risk of further
alienating newcomers to the language who have a misconception that its too

Admittedly, I am not well informed of the state of GHC 8.0 development and
haven't had time to fully look into the situation. I am very interested to
see where this conversation and the default complexity of Haskell goes.


On Fri, Feb 5, 2016 at 8:26 AM, Tom Ellis <
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> wrote:

> On Fri, Feb 05, 2016 at 05:25:15PM +0100, Johannes Waldmann wrote:
> > > What's changed?
> >
> > I was referring to a discussion on ghc-devs, see
> > https://mail.haskell.org/pipermail/ghc-devs/2016-February/011268.html
> > and mixed up addresses when replying.
> I'm glad you did, because this is the first I've heard of it!
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160205/e65bb8d3/attachment.html>

More information about the Haskell-Cafe mailing list