# Towards a prevalent alternative prelude?

**URL:** <https://discourse.haskell.org/t/towards-a-prevalent-alternative-prelude/1986>\
**Category:** Haskell Foundation\
**Created:** [March 5, 2021, 9:10pm UTC](https://discourse.haskell.org/t/towards-a-prevalent-alternative-prelude/1986 "2021-03-05T21:10:53Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![bgamari](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/bgamari/32/3599_2.png) [@bgamari](https://discourse.haskell.org/u/bgamari)\
**Post date:** [March 5, 2021, 9:48pm UTC](https://discourse.haskell.org/t/towards-a-prevalent-alternative-prelude/1986/7 "2021-03-05T21:48:44Z")

</div>

> [@hgolden](#):
>
> Suggestion: freeze “base” and call the new prelude by a new name. Eventually, just let “base” wither away.

The tricky part here is that `base` (unfortunately) currently serves a few, largely orthogonal roles:

1. it serves as the home of GHC’s IO subsystem (the event manager) which is closely tied to GHC’s runtime system (e.g. `GHC.Event`, `GHC.Conc`)

- it serves as the home of several core typeclasses which are closely tied to the compiler (e.g. `GHC.Base`, `GHC.Functor`, `GHC.Enum`, `GHC.Generics`)
- it serves as the home for wrappers to GHC primops which could in principle be implemented elsewhere (e.g. `Data.IORef`)
- it serves as a “dumping ground” for things that are “foundational” enough that they should be shipped with the compiler, but which otherwise have no particular relation to GHC (e.g. `Data.Fixed`, `Data.Foldable`, `Data.Tuple`, `Text.Printf`)

In my mind, `base` really ought to be several different packages. This is even something that has been [attempted](https://gitlab.haskell.org/ghc/ghc/-/wikis/split-base) in the past. However, implementation is sadly non-trivial as due to, among other things, module cycles and orphan instance issues.

---

_[View the full topic](https://discourse.haskell.org/t/towards-a-prevalent-alternative-prelude/1986)._
