The future of the haskell2010/haskell98 packages - AKA Trac #9590

Simon Peyton Jones simonpj at microsoft.com
Tue Sep 30 20:25:08 UTC 2014


I hate #1.  Let's avoid if unless it's really crucial to some of our users.

Simon

| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Austin
| Seipp
| Sent: 30 September 2014 21:21
| To: ghc-devs at haskell.org; glasgow-haskell-users at haskell.org
| Subject: The future of the haskell2010/haskell98 packages - AKA Trac
| #9590
| 
| Hello developers, users, friends,
| 
| I'd like you all to weigh in on something - a GHC bug report, that has
| happened as a result of making Applicative a superclass of Monad:
| 
| https://ghc.haskell.org/trac/ghc/ticket/9590
| 
| The very condensed version is this: because haskell2010/haskell98
| packages try to be fairly strictly conforming, they do not have
| modules like Control.Applicative.
| 
| Unfortunately, due to the way these packages are structured, many
| things are simply re-exported from base, like `Monad`. But
| `Applicative` is not, and cannot be imported if you use -XHaskell2010
| and the haskell2010 package.
| 
| The net result here is that haskell98/haskell2010 are hopelessly
| broken in the current state: it's impossible to define an instance of
| `Monad`, because you cannot define an instance of `Applicative`,
| because you can't import it in the first place!
| 
| This leaves us in quite a pickle.
| 
| So I ask: Friends, what do you think we should do? I am particularly
| interested in users/developers of current Haskell2010 packages - not
| just code that may *be* standard Haskell - code that implies a
| dependency on it.
| 
| There was a short discussion between me and Simon Marlow about this in
| the morning, and again on IRC this morning between me, Duncan, Edward
| K, and Herbert.
| 
| Basically, I only see one of two options:
| 
|  - We could make GHC support both: a version of `Monad` without
| `Applicative`, and one with it. This creates some complication in the
| desugarer, where GHC takes care of `do` syntax (and thus needs to be
| aware of `Monad`'s definition and location). But it is, perhaps, quite
| doable.
| 
|  - We change both packages to export `Applicative` and follow the API
| changes in `base` accordingly.
| 
| Note that #1 above is contingent on three things:
| 
|  1) There is interest in this actually happening, and these separate
| APIs being supported. If there is not significant interest in
| maintaining this, it's unclear if we should go for it.
| 
|  2) It's not overly monstrously complex (I don't think it necessarily
| will be, but it might be.)
| 
|  3) You can't like `haskell2010` packages and `base` packages together
| in the general case, but, AFAIK, this wasn't the case before either.
| 
| I'd really appreciate your thoughts. This must be sorted out for 7.10
| somehow; the current situation is hopelessly busted.
| 
| --
| Regards,
| 
| Austin Seipp, Haskell Consultant
| Well-Typed LLP, http://www.well-typed.com/
| _______________________________________________
| ghc-devs mailing list
| ghc-devs at haskell.org
| http://www.haskell.org/mailman/listinfo/ghc-devs


More information about the ghc-devs mailing list