
This is a ranty request for comments, and the more replies the better. 1. Namespace pollution The Prelude uses many simple and obvious names. Most programs don't use the whole Prelude, so names that aren't needed take up namespace with no benefit. 2. Monomorphism The Prelude defines many data types (e.g Lists), and operations on these types. Because the Prelude is imported automatically, programmers are encouraged to write their programs in terms of non-overloaded operators. These programs then fail to generalize. This is a highly non-academic concern. Many widely used libraries, such as Parsec, operate only on lists and not the newer and more efficient sequence types, such as bytestrings. 3. Supports obsolete programming styles The Prelude uses, and by means of type classes encourages, obsolete and naive programming styles. By providing short functions such as nub automatically while forcing imports to use sets, the Prelude insidiously motivates programmers to treat lists as if they were sets, maps, etc. This makes Haskell programs even slower than the inherent highlevelness of laziness requires; real programs use nub and pay dearly. More damagingly, the Prelude encourages programmers to use backtracking parsers. Moore's law can save you from nub, but it will never clarify "Prelude.read: no parse". 4. Stagnation Because every program uses the Prelude, every program depends on the Prelude. Nobody will willingly propose to alter it. (This is of course Bad; I hope Haskell' will take the fleeting opportunity to break to loop) 5. Inflexibility Because of Haskell's early binding, the Prelude always uses the implementation of modules that exists where the Prelude was compiled. You cannot replace modules with better ones. 6. Dependency Because every module imports the Prelude every module that the Prelude depends on, mutually depends with the Prelude. This creates huge dependency groups and general nightmares for library maintainers. 7. Monolithicity Every module the Prelude uses MUST be in base. Even if packages could be mutually recursive, it would be very difficult to upgrade any of the Prelude's codependents. 8. Monolithic itself Because the Prelude handles virtually everything, it is very large and cannot be upgraded or replaced piecemeal. Old and new prelude parts cannot coexist. 9. One-size-fits-all-ism Because the Prelude must satisfy everyone, it cannot be powerful, because doing so would harm error messages. Many desirable features of Haskell, such as overloaded map, have been abandoned because the Prelude needed to provide crutches for newbies. 10. Portability Because the Prelude must be available everywhere, it is forced to use only least-common-denominator features in its interface. Monad and Functor use constructor classes, even though MPTC/FD is usefully far more flexible. The Class_system_extension_proposal, while IMO extremely well designed and capable of alleviating most of our class hierarchy woes, cannot be adopted. 11. Committeeism Because the Prelude has such a wide audience, a strong committee effect exists on any change to it. This is the worst kind of committeeism, and impedes real progress while polluting the Prelude with little-used features such as fail in Monad (as opposed to MonadZero) and until. 12. There is no escape Any technical defect in Map could be fixed by someone writing a better Map; this has happened, and the result has been accepted. Defects in the PackedString library have been fixed, with the creation and adoption of ByteString. Defects in System.Time have been fixed, by the creation and adoption of Data.Time. Ditto for Binary and Arrays and Network and Regex. But this will never happen for the Prelude. A replacement Prelude cannot be adopted because it is so easy to take the implicit import of the default one. Nobody will go out of their way to 'import Prelude() ; import FixedPrelude'. Psychology trumps engineering. 13. There can be no escape The Prelude was designed by extremely smart people and was considered close to perfect at the time. It is almost universally hated now. Even if all the issues I describe could be fixed (which I consider unlikely), the Prelude will almost certainly be hated just as universally five years hence. 14. My future Given all these issues, I consider the only reasonable option is to discard the Prelude entirely. There will be no magic modules. Everything will be an ordinary library. HOFs like (.) are available from Control.Function. List ops come from Data.List. Any general abstractions can be added in abstract Sequence, Monad, etc. modules. Haskell will regain the kind of organic evolution whose lack currently causes Haskell to lose its lead over Python et al by the day. Stefan

Given all these issues, I consider the only reasonable option is to discard the Prelude entirely. There will be no magic modules. Everything will be an ordinary library. HOFs like (.) are available from Control.Function. List ops come from Data.List. Any general abstractions can be added in abstract Sequence, Monad, etc. modules. Haskell will regain the kind of organic evolution whose lack currently causes Haskell to lose its lead over Python et al by the day. I basically agree with a lot of the things you say. The only thing is: it's so convenient to have the Prelude. I can just start writing my haskell programs and don't have to worry about all kinds of imports. And you'll end up being repetitive: you'll import (.) and stuff like that in _every_ file. Yeah, this will definitely be more modular, but if we go for it, it's going to be so much more (tedious) work to create a new program.
-chris

On 3/24/07, Chris Eidhof
Given all these issues, I consider the only reasonable option is to discard the Prelude entirely. There will be no magic modules. Everything will be an ordinary library. HOFs like (.) are available from Control.Function. List ops come from Data.List. Any general abstractions can be added in abstract Sequence, Monad, etc. modules. Haskell will regain the kind of organic evolution whose lack currently causes Haskell to lose its lead over Python et al by the day. I basically agree with a lot of the things you say. The only thing is: it's so convenient to have the Prelude. I can just start writing my haskell programs and don't have to worry about all kinds of imports. And you'll end up being repetitive: you'll import (.) and stuff like that in _every_ file. Yeah, this will definitely be more modular, but if we go for it, it's going to be so much more (tedious) work to create a new program.
The solution is simple: * If there is a "module M where" clause in the beginning of the file, then it's a "proper" module and shouldn't import the Prelude. * If there is no module declaration then it's a "quick'n dirty script" and should have the Prelude implicitly imported. * Interactive interpreters should probably import the Prelude. That should take of most issues. -- Sebastian Sylvan +44(0)7857-300802 UIN: 44640862

On Mar 24, 2007, at 2:36 AM, Sebastian Sylvan wrote:
On 3/24/07, Chris Eidhof
wrote: Given all these issues, I consider the only reasonable option is to discard the Prelude entirely. There will be no magic modules. Everything will be an ordinary library. HOFs like (.) are available from Control.Function. List ops come from Data.List. Any general abstractions can be added in abstract Sequence, Monad, etc. modules. Haskell will regain the kind of organic evolution whose lack currently causes Haskell to lose its lead over Python et al by the day. I basically agree with a lot of the things you say. The only thing is: it's so convenient to have the Prelude. I can just start writing my haskell programs and don't have to worry about all kinds of imports. And you'll end up being repetitive: you'll import (.) and stuff like that in _every_ file. Yeah, this will definitely be more modular, but if we go for it, it's going to be so much more (tedious) work to create a new program.
The solution is simple:
* If there is a "module M where" clause in the beginning of the file, then it's a "proper" module and shouldn't import the Prelude. * If there is no module declaration then it's a "quick'n dirty script" and should have the Prelude implicitly imported. * Interactive interpreters should probably import the Prelude. So if I'm writing a script, which has been working, then import Control.Monad, it all suddenly stops working?
I also think that you want to minimize the differences between an interpreted (interactive) version and a compiled version. It would be very weird for first-time users if their scripts work in ghci but break when they compile them. I'm sorry for being so negative. I like the idea, but I don't like it from a newbie-standpoint. The thing is: this is mostly handy for power-users, maybe we should do it for power-users only? We can still change the prelude to have no more code in there, but make it only a bunch of imports? -chris

Chris Eidhof writes:
On Mar 24, 2007, at 2:36 AM, Sebastian Sylvan wrote:
The solution is simple:
* If there is a "module M where" clause in the beginning of the file, then it's a "proper" module and shouldn't import the Prelude. * If there is no module declaration then it's a "quick'n dirty script" and should have the Prelude implicitly imported. * Interactive interpreters should probably import the Prelude.
So if I'm writing a script, which has been working, then import Control.Monad, it all suddenly stops working?
No, that's an import declaration, not a module declaration.
So far, this is my favorite proposal, but I'm not sure it's better than
leaving things the way they are. There's a lot of useful stuff in the
Prelude, so the typical usage is likely to be "import Prelude hiding
(...)", which you can do right now.
On the other hand, making this like this explicit seems consistent with
Haskell's traditions.
--
David Menendez

Hi Reducing to just haskell-cafe - since this isn't yet a concrete proposal - more just a discussion.
1. Namespace pollution
Do you want to overload (.) ? I think its good that some names mean standard things. Maybe not as many as the prelude, but some standard things are good.
This is a highly non-academic concern. Many widely used libraries, such as Parsec, operate only on lists and not the newer and more efficient sequence types, such as bytestrings.
Lists in Haskell are the nicest data structure, they work most naturally with the language. There is a reason that lists is the default.
3. Supports obsolete programming styles
Niggle: nub isn't in Prelude, it's Data.List
More damagingly, the Prelude encourages programmers to use backtracking parsers. Moore's law can save you from nub, but it will never clarify "Prelude.read: no parse".
This is very bad!
5. Inflexibility
Because of Haskell's early binding, the Prelude always uses the implementation of modules that exists where the Prelude was compiled. You cannot replace modules with better ones.
I think this is a good thing - I can imagine people changing map to also do a reverse, then changing it retroactively in an existing program/library. They should at least be forced to recompile.
6. Dependency
Could not agree more! If additionally your compiler is written in a silly way, you can make this problem 100 times worse for yourself.
13. There can be no escape
I still like the Prelude.
14. My future
Given all these issues, I consider the only reasonable option is to discard the Prelude entirely. There will be no magic modules. Everything will be an ordinary library. HOFs like (.) are available from Control.Function. List ops come from Data.List. Any general abstractions can be added in abstract Sequence, Monad, etc. modules. Haskell will regain the kind of organic evolution whose lack currently causes Haskell to lose its lead over Python et al by the day.
I would then provide "Common" or something, which just imported and exported Control.Function/Data.List and the other common modules. This would probably be better for scripts (I often end up importing Data.List, System.Directory, System.Process), and would make larger programs more explicit. If Common was provided as a replacement, which was more general than the Prelude, then you could do that easily. With a tiny bit of work I think you could replicate Prelude and add flags as required. Of course, I think technically this would be a lot of work - just fighting with dependencies, bugs, make systems, silly compilers etc. Thanks Neil

On Sat, 2007-03-24 at 11:53 +0000, Neil Mitchell wrote:
This is a highly non-academic concern. Many widely used libraries, such as Parsec, operate only on lists and not the newer and more efficient sequence types, such as bytestrings.
Lists in Haskell are the nicest data structure, they work most naturally with the language. There is a reason that lists is the default.
In particular lists are often used as a control structure whereas most other sequence data types are really only data structures. Duncan

On Saturday 24 March 2007 03:48, Stefan O'Rear wrote:
1. Namespace pollution
The Prelude uses many simple and obvious names. Most programs don't use the whole Prelude, so names that aren't needed take up namespace with no benefit. [...]
Even though I think that the current Prelude is far from perfect, one should not forget that is a very solid foundation of a "common language": If one sees e.g. '(.)' or 'map', it is immediately clear to everybody what this means, without having to scan through (perhaps long) import lists. Of course one could hide some parts of the Prelude etc., but I think in the long run this only leads to confusion. Redefining common things, heavy use of tons of self-defined operators etc. all make maintenance much harder. Try reading Lisp code with heavy use of macros or C++ code with tons of overloadings. This is more like Sudoku solving than anything else, because there is no "common language" between the author and the reader anymore. And taking away the prelude is a little bit like taking away 'int', 'double', 'for', 'while' etc. from the C programmer...
11. Committeeism
Because the Prelude has such a wide audience, a strong committee effect exists on any change to it. This is the worst kind of committeeism, and impedes real progress while polluting the Prelude with little-used features such as fail in Monad (as opposed to MonadZero) and until.
Depending on your viewpoint, you can see this as a plus. Everybody agrees that finalizers are evil, but propose the removal of that method from java.lang.Object to the Java people. :-) My proposal would be to incrementally improve the Prelude, modularize it a bit more, fix the Num hierarchy, but basically leave it as it is. Cheers, S.

G'day all.
Quoting Sven Panne
Even though I think that the current Prelude is far from perfect, one should not forget that is a very solid foundation of a "common language": If one sees e.g. '(.)' or 'map', it is immediately clear to everybody what this means, [...]
Unless you import Data.Map, of course. Cheers, Andrew Bromage

On Sat, Mar 24, 2007 at 10:08:48PM -0400, ajb@spamcop.net wrote:
G'day all.
Quoting Sven Panne
: Even though I think that the current Prelude is far from perfect, one should not forget that is a very solid foundation of a "common language": If one sees e.g. '(.)' or 'map', it is immediately clear to everybody what this means, [...]
Unless you import Data.Map, of course.
Wouldn't this be a non-issue if the "map" in Prelude was fmap? Jason Creighton

G'day all.
Quoting Jason Creighton
Wouldn't this be a non-issue if the "map" in Prelude was fmap?
It would be a non-issue if a number of things were different, such as if Data.Map were a Functor and "map" was the Functor map instead of the list map. Either way, it highlights at least two of the original complaints about the Prelude: 1. It gobbles up names that people want to use. 2. It's not generic enough. Incidentally, I disagree with one of the sentences in the OP: "The Prelude was designed by extremely smart people and was considered close to perfect at the time." The first half is, at best, partly true. Don't get me wrong, everyone who has added stuff to the Prelude over the years was, I have no doubt, individually smart. But it would be only partly correct to call it "designed". Rather, it was originally consolidated from all of the Miranda-work-alikes of the late 80s, then gradually added to as features (e.g. constructor classes) were addedto the language. As such, the Prelude is not a well-designed coherent whole, but rather an eclectic mix of Miranda-isms and Gofer-isms. I understand that we do need a common base language of functions, and calling it "Prelude" is as good as ny other. But we don't miss complex numbers being in the Prelude, and I suspect we wouldn't miss other stuff getting moved out into modules either. Cheers, Andrew Bromage

On Sun, Mar 25, 2007 at 12:59:26AM -0400, ajb@spamcop.net wrote:
G'day all.
Quoting Jason Creighton
: Wouldn't this be a non-issue if the "map" in Prelude was fmap?
It would be a non-issue if a number of things were different, such as if Data.Map were a Functor and "map" was the Functor map instead of the list map.
Data.Map is a Functor: http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Map.html#t%3AMap ~$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base ... linking ... done. Prelude> :m + Data.Map Prelude Data.Map> fmap (*2) (fromList [(1,2), (3,4)]) fromList [(1,4),(3,8)] ...but perhaps it's not a Functor in some earlier version of the library? Jason Creighton

I don't think he would be confused with functor in SML. Call functors static classes and you cut the language from intuition. In such language anybody can express anything. But to arrive at something one needs intuition! Now, what mathematically blind programmers can gain from learning about monad if they are taught that functor is a class? -Andrzej

G'day all.
Quoting Jason Creighton
Data.Map is a Functor: [...] ...but perhaps it's not a Functor in some earlier version of the library?
Possibly, if by "earlier version" you mean FiniteMap. At any rate, since Map is a Functor, I vote for Data.Map.map to be deleted. Any disagreements before I submit the ticket? Cheers, Andrew Bromage

Hi
At any rate, since Map is a Functor, I vote for Data.Map.map to be deleted. Any disagreements before I submit the ticket?
Yes. It will break 100's of applications. If you are going to do this, you probably need to propose it be marked as depreciated, and then deleted sometime years into the future. Thanks Neil

I can contribute a few. On Mar 26, 2007, at 02:14 , ajb@spamcop.net wrote:
G'day all.
Quoting Neil Mitchell
: Yes. It will break 100's of applications.
That sounds like a challenge! Find me 100 applications that use Data.Map.map and I will eat crow.
Cheers, Andrew Bromage _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

ajb:
G'day all.
Quoting Neil Mitchell
: Yes. It will break 100's of applications.
That sounds like a challenge! Find me 100 applications that use Data.Map.map and I will eat crow.
Well, it'll break 100s of modules :-) $ find . -name '*.hs' -exec grep -l 'import.*Data\.Map' {} \; | wc -l 545 You could also grep the 100+ packages on hackage. -- Don

ajb@spamcop.net wrote:
G'day all.
Quoting Neil Mitchell
: Yes. It will break 100's of applications.
That sounds like a challenge! Find me 100 applications that use Data.Map.map and I will eat crow.
Well, I haven't written 100s of applications (yet), but I get hits on 'map' in each and every one of them. Of course, wouldn't map = fmap solve the problem? Dave

David Brown wrote:
ajb@spamcop.net wrote:
G'day all.
Quoting Neil Mitchell
: Yes. It will break 100's of applications. That sounds like a challenge! Find me 100 applications that use Data.Map.map and I will eat crow.
Well, I haven't written 100s of applications (yet), but I get hits on 'map' in each and every one of them.
Ugh. I need to pay attention more before replying. I use Data.Map but never use Data.Map.map. I usually transform the data before putting it into the map. Dave

Hi
Yes. It will break 100's of applications.
That sounds like a challenge! Find me 100 applications that use Data.Map.map and I will eat crow.
http://www.google.com/codesearch?hl=en&q=+lang:haskell+Map.map&start=10&sa=N Since most people import qualified Data.Map as Map. Not all of those are real hits, but it looks like 100 is a reasonable goal. Thanks Neil

On 24/03/07, Stefan O'Rear
This is a ranty request for comments, and the more replies the better.
Without responding to any particular comment, my opinion is that we should have a minimal Prelude with functions like (.) that couldn't be reasonably redefined in any function. Most of the list functions should have to be imported, to encourage people to use a Map or Array and so on. Read should be in Text.Read to encourage people to use Parsec and so on. I wouldn't necessarily be against a minimal Prelude/expanded Prelude split determined by a 'module M where' declaration, as suggested by Sebastian. -- -David House, dmhouse@gmail.com

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 David House wrote:
On 24/03/07, Stefan O'Rear
wrote: This is a ranty request for comments, and the more replies the better.
Without responding to any particular comment, my opinion is that we should have a minimal Prelude with functions like (.) that couldn't be reasonably redefined in any function.
I can recall two variations on (.)... Strict composition, perhaps (.!), that is somehow strict in the functions that are its arguments. Unicode composition, i.e. use the Unicode character for function composition (?) instead of the overloaded (with module system syntax) "." symbol Not that these are worthy alternatives for our Prelude, just reasons that I don't entirely like the idea of any implicitly included prelude. Isaac -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGD57RHgcxvIWYTTURAjwuAKCeX5KJ+511lctcC5EXJ+7kYtsNqACfd/GS PSteOUuiJqYAaaJBwiblaso= =U/j/ -----END PGP SIGNATURE-----

why do people insist that what they don't need has no right to live? also, there doesn't seem to be anything left in the Prelude itself, it just re-exports everything from one particular collection of modules. so the Prelude isn't really a useful target for complaints anymore, only the implicit import Prelude and the organisation of the base package are. authors and readers of older haskell books, as well as other programmers caring about stability will want -package haskell98 to provide the one implicitly imported Prelude. for those about to rely on -package haskell-prime, things are still open, while those relying on -package base will want clear documentation on which versions of base are backwards-compatible with all those haskell programs currently out there relying on an implicit Prelude, and which are not.
1. Namespace pollution 2. Monomorphism 3. Supports obsolete programming styles
these points could be addressed by requiring explicit import Prelude, starting from packages haskell-prime and the next version of base.
4. Stagnation 5. Inflexibility 6. Dependency 7. Monolithicity
these points seem to apply to package base rather than just the Prelude.
8. Monolithic itself 9. One-size-fits-all-ism 10. Portability 11. Committeeism 12. There is no escape 13. There can be no escape
once most code-bases have shifted to explicit import Prelude, it will become easier
to replace that with import MyFavouritePrelude, where appropriate. that will also add
more force to the recommendation to be more specific about imports, eg, import
Data.List instead of import Prelude. once the Prelude is less attractive as an exaggerated
swiss army knife style dumping ground for and source of definitions, the focus will perhaps
shift to the separate modules it re-exports.
i could well imagine different projects and books defining their own Prelude, re-exporting
all those and only those modules needed or appropriate for their code. for instance, a
haskell programming tutorial will have different needs (only basics) than a graphics tutorial
(gui libs) than a book (functions provided in or disscussed in the book) than a script
(System.Environment, System.Directory,..) than a <insert your current project here>
(

I've submitted: http://hackage.haskell.org/trac/haskell-prime/ticket/124 which I hope covers the essence of the result of this thread. Thanks Ian

On 25/03/07, Ian Lynagh
I've submitted:
http://hackage.haskell.org/trac/haskell-prime/ticket/124
which I hope covers the essence of the result of this thread.
I'd hate to have to import things like Data.Function for such trivial functions as (.) and ($), which are so often used that they become almost like control structures and keywords in themselves. What did people think of my idea of a stripped down prelude containing primarily the functions like (.) and ($)? Here'd be my list: 1. Almost like control structures otherwise (.) flip ($) 2. To make including literals sane Char String Int Integer Num(..) 3. Other basic functions Eq(..) Ord((<), (>), (<=), (>=)) Show(show) 4. Miscellaneous id const undefined Of course, the precise details would be debateable. -- -David House, dmhouse@gmail.com

[reply-to set; dropping libraries] On Sun, Mar 25, 2007 at 04:33:51PM +0100, David House wrote:
On 25/03/07, Ian Lynagh
wrote: I've submitted:
http://hackage.haskell.org/trac/haskell-prime/ticket/124
which I hope covers the essence of the result of this thread.
I'd hate to have to import things like Data.Function for such trivial functions as (.) and ($)
You wouldn't have to import a number of different modules like Data.Function, you could just import Prelude. The only difference is that, for Real modules, you explicitly say that you want the Prelude, rather than sometimes needing magic like import Prelude () Thanks Ian

On 25/03/07, Ian Lynagh
You wouldn't have to import a number of different modules like Data.Function, you could just import Prelude.
I guess what I was getting at was that Haskell is very good at blurring the distinction between userland function and actual syntax. E.g. to the untrained eye 'otherwise' may seem like a keyword, but it's defined in Data.Bool. Functions like map and catamorphisms like maybe and foldr are used just like control structures, not to mention things like when and unless which are built to directly emulate control structures in other languages. As real control structures, like if and case, are always in scope, having _no_ functions imported by default would drive an unnatural wedge between function and control structure. -- -David House, dmhouse@gmail.com

On 3/25/07, David House
On 25/03/07, Ian Lynagh
wrote: I've submitted:
http://hackage.haskell.org/trac/haskell-prime/ticket/124
which I hope covers the essence of the result of this thread.
I'd hate to have to import things like Data.Function for such trivial functions as (.) and ($), which are so often used that they become almost like control structures and keywords in themselves. What did people think of my idea of a stripped down prelude containing primarily the functions like (.) and ($)? Here'd be my list:
1. Almost like control structures otherwise (.) flip ($)
2. To make including literals sane Char String Int Integer Num(..)
3. Other basic functions Eq(..) Ord((<), (>), (<=), (>=)) Show(show)
4. Miscellaneous id const undefined
Of course, the precise details would be debateable.
I think I like this proposal. Perhaps without 2 though (unless Num and String gets some attention). I'm not sure the "not automatically imported if proper module" rule is needed if the Prelude gets stripped down a bit, but I wouldn't mind it (it makes sense to make imports explicit in "proper" modules). So to summarize what I perceive to be the issues: * Do we want a new Prelude, or just hide the existing one? (I want a new, stripped down version) * Should this new Prelude be automatically included always, or should it be hidden in "proper modules" (I'm ambivalent). * Should there be a larger backwards compatible Prelude (I think Yes) * Shold this larger Prelude be implicitly imported for non-proper modules? (I think no, it should always be explicitly imported, perhaps through command line options) With regards to the first point, I think it's a misstake to just have "Large Prelude which is not implicitly imported" because everytime you need (.) or ($) people would probably just "import Prelude" and then you're stuck with the old problem again. So I do think stripping down the Prelude is essential. I think this is a separate issue that can be agreed upon regardless of the issue of wether it should be implicitly imported or not. -- Sebastian Sylvan +44(0)7857-300802 UIN: 44640862

On Sun, Mar 25, 2007 at 04:05:51PM +0100, Ian Lynagh wrote:
I've submitted:
http://hackage.haskell.org/trac/haskell-prime/ticket/124
which I hope covers the essence of the result of this thread.
My goal of sparking thought was sucessful :) I like Claus Reinke's proposal, it solves all of my problems quite nicely. (Can we get that on the h' wiki? It is rather similar (but definitely different) to the minimal-prelude proposal on the Prelude page.) Stefan

I support both reducing the prelude to just a few commonly used combinators, and requiring an explicit import Prelude. In response to a couple of Stefan's points: Stefan O'Rear wrote:
6. Dependency
Because every module imports the Prelude every module that the Prelude depends on, mutually depends with the Prelude. This creates huge dependency groups and general nightmares for library maintainers.
Not a problem in practice, for GHC at least: all modules below the Prelude use -fno-implicit-prelude, there's no recursive dependency. Also, if the Prelude were smaller, it would be much lower in the dependency tree which would make life easier.
7. Monolithicity
Every module the Prelude uses MUST be in base. Even if packages could be mutually recursive, it would be very difficult to upgrade any of the Prelude's codependents.
Not necessarily - the Prelude itself doesn't have to be in base. If we split up base, then Prelude would likely have to be in a separate package. Haskell' will need a separate Prelude, so the Haskell 98 Prelude will need to move to the haskell98 package. Cheers, Simon

On blessed Wed Mar 28 05:52:03 EDT 2007 Simon Marlow wrote:
I support both reducing the prelude to just a few commonly used combinators, and requiring an explicit import Prelude. (...)
So YOU are the GOD's angle with the sword! And thus we leave the orchard for a battlefield. I really like this:-) Holy regards, -Andrzej

On 28/03/07, Simon Marlow
I support both reducing the prelude to just a few commonly used combinators, and requiring an explicit import Prelude.
Just to clear things up: would you need to do an import Prelude to get at these few commonly used combinators, or would the import pull in the 'wider' Prelude, with a more expansive selection, more akin to the current Prelude? -- -David House, dmhouse@gmail.com
participants (18)
-
ajb@spamcop.net
-
Andrzej Jaworski
-
Chris Eidhof
-
Claus Reinke
-
David Brown
-
David House
-
David Menendez
-
dons@cse.unsw.edu.au
-
Duncan Coutts
-
Ian Lynagh
-
Isaac Dupree
-
Jason Creighton
-
Lennart Augustsson
-
Neil Mitchell
-
Sebastian Sylvan
-
Simon Marlow
-
Stefan O'Rear
-
Sven Panne