The Other Prelude: Difference between revisions
Uchchwhash (talk | contribs) (fmt, outline) |
Uchchwhash (talk | contribs) (well, evolving) |
||
Line 4: | Line 4: | ||
== Naming Conventions == | == Naming Conventions == | ||
The principal is to make the names very readable for both beginners and category theorists (if any). | The principal is to make the names very readable for both beginners and category theorists (if any). | ||
== Guidelines == | |||
* The prelude should not contain any "projection" functions (like <hask>fst</hask> and <hask>snd</hask>. They go to the Extension module. | |||
== Issues == | |||
* Should alphanumeric names be preferred over symbols when defining a class? | |||
== The Hierarchy == | == The Hierarchy == | ||
Line 15: | Line 23: | ||
<haskell> | <haskell> | ||
import Prelude () -- hide everything | |||
-- the idea is to remove 'fmap' | |||
-- and map :: (a -> b) -> [a] -> [b] to be a special case | |||
class Functor f where | |||
map :: (a -> b) -> f a -> f b | |||
-- should the Functor hierarchy proposal be adopted? | |||
class Monad m where | |||
(>>=) :: m a -> (a -> m b) -> m b | |||
(>>) :: m a -> m b -> m b | |||
return :: a -> m a | |||
fail :: String -> m a | |||
</haskell> | </haskell> | ||
Revision as of 06:29, 21 December 2006
Call for Contribution
This fun project, called "The Other Prelude", and is a creative reconstruction of the standard Prelude. By disregarding history and compatibility, we get a clean sheet.
Naming Conventions
The principal is to make the names very readable for both beginners and category theorists (if any).
Guidelines
- The prelude should not contain any "projection" functions (like
fst
andsnd
. They go to the Extension module.
Issues
- Should alphanumeric names be preferred over symbols when defining a class?
The Hierarchy
TheOtherPrelude
- Minimalistic module.TheOtherPrelude.Extension
- Convenient definitions.
The Code
Currently, the code is in Wiki form. If people do agree that the collaborative decisions begot something pretty, we'll have a group of files in darcs.haskell.org some time.
The imaginery Prelude as it stands,
import Prelude () -- hide everything
-- the idea is to remove 'fmap'
-- and map :: (a -> b) -> [a] -> [b] to be a special case
class Functor f where
map :: (a -> b) -> f a -> f b
-- should the Functor hierarchy proposal be adopted?
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a
fail :: String -> m a
How to use it, as it stands,
import Prelude () -- hide everything
import TheOtherPrelude -- get everything
import qualified TheOtherPrelude.Monad as M -- standard convention
See Also
- Mathematical prelude discussion - A numeric Prelude. Could this be merged into this one?
- Prelude extensions and Prelude function suggestions - Unlike "The Other Prelude" they enhance the Prelude.