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