New type of ($) operator in GHC 8.0 is problematic

Oleg Grenrus oleg.grenrus at
Sat Feb 6 19:07:01 UTC 2016

> On 06 Feb 2016, at 15:30, ghc-devs at wrote:
> Richard, thank you very much for your elaborate statement.  The
> problem I see with a `BeginnersPrelude` is that it will either
> outdate, or create a bubble escaping from which is so painful that
> most new Haskell programmers will hesitate to take the step.  GHC
> developement will carry on, more and more things being hidden behind
> `BeginnersPrelude` automatically.  We will end up educating Beginners
> that will want to stay beginners.
> I'd personally wish for a `-fdefault-levity` switch, but I do not
> oversee all the consequences right now.  I know it puts load on you,
> but this actually just tells you that the language you're building
> became a bit less learnable, maybe it's good to be aware of that.
> Kind regards
> Stefan

I came with maybe silly idea: What if we had a way to re-export the symbol with less-general type:

module Prelude.YourCourse (
   ($) :: (a -> b) -> a -> b,
   foldr :: (a -> b -> b) -> b -> [a] -> b,
   ) where

{-# LANGUAGE NoExplicitPrelude #-}
module Main (main) where

import Prelude.YourCourse

-- but if people need general foldr, you can:
import Prelude (foldr)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <>

More information about the ghc-devs mailing list