diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+*.agdai
+.DS_Store
+dist/
+.cabal-sandbox/
+cabal.sandbox.config
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: haskell
+ghc: 7.8
+notifications:
+  email: true
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,43 @@
+Copyright (c) 2015 Scott Fleischman
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=======
+The MIT License (MIT)
+
+Copyright (c) 2015 Scott Fleischman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# cafeteria-prelude
+
+[![Build Status](https://travis-ci.org/scott-fleischman/cafeteria-prelude.svg)](https://travis-ci.org/scott-fleischman/cafeteria-prelude)
+
+Prelude subsets—take only what you want!
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/cafeteria-prelude.cabal b/cafeteria-prelude.cabal
new file mode 100644
--- /dev/null
+++ b/cafeteria-prelude.cabal
@@ -0,0 +1,70 @@
+name:                cafeteria-prelude
+category:            Prelude
+version:             0.1.0.0
+license:             MIT
+cabal-version:       >=1.10
+license-file:        LICENSE
+author:              Scott Fleischman
+maintainer:          scott.fleischman@logos.com
+homepage:            https://github.com/Scott-Fleischman/cafeteria-prelude
+synopsis:            Prelude subsets—take only what you want!
+build-type:          Simple
+description:
+  This package contains many subsets of the Prelude allowing you to take only what you need.
+  .
+  Modules named Prelude.Source.* are organized by the location of the source code.
+
+extra-source-files:
+  .travis.yml
+  .gitignore
+  LICENSE
+  README.md
+
+source-repository head
+  type:     git
+  location: git://github.com/scott-fleischman/cafeteria-prelude.git
+
+library
+  exposed-modules:
+    Prelude.Basic
+    Prelude.Error
+    Prelude.Error.IO
+    Prelude.Error.Misc
+    Prelude.List
+    Prelude.List.Partial
+    Prelude.List.Total
+    Prelude.Number
+    Prelude.Number.Float
+    Prelude.Number.Num
+    Prelude.Number.Real
+    Prelude.Strict
+    Prelude.String
+    Prelude.String.IO
+    Prelude.String.Show
+    Prelude.String.Read
+    Prelude.String.Type
+    Prelude.TypeClass
+    Prelude.Source.GHC.Base
+    Prelude.Source.GHC.Classes
+    Prelude.Source.GHC.Enum
+    Prelude.Source.GHC.Err
+    Prelude.Source.GHC.Float
+    Prelude.Source.GHC.IO
+    Prelude.Source.GHC.IO.Exception
+    Prelude.Source.GHC.List
+    Prelude.Source.GHC.Num
+    Prelude.Source.GHC.Prim
+    Prelude.Source.GHC.Real
+    Prelude.Source.GHC.Show
+    Prelude.Source.GHC.Types
+    Prelude.Source.Control.Monad
+    Prelude.Source.Data.Either
+    Prelude.Source.Data.List
+    Prelude.Source.Data.Maybe
+    Prelude.Source.Data.Tuple
+    Prelude.Source.Prelude
+    Prelude.Source.System.IO
+    Prelude.Source.Text.ParserCombinators.ReadP
+  build-depends:       base >=4.7 && <5
+  hs-source-dirs:      src
+  default-language:    Haskell2010
diff --git a/src/Prelude/Basic.hs b/src/Prelude/Basic.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Basic.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Basic (
+    Bool(False, True),
+    Maybe(Nothing, Just),
+    maybe,
+    Either(Left, Right),
+    either,
+    Ordering(LT, EQ, GT),
+    Char,
+    fst, snd, curry, uncurry,
+    id, const, (.), flip, ($), until,
+    asTypeOf,
+  ) where
+
+import Prelude (
+    Bool(False, True),
+    Maybe(Nothing, Just),
+    maybe,
+    Either(Left, Right),
+    either,
+    Ordering(LT, EQ, GT),
+    Char,
+    fst, snd, curry, uncurry,
+    id, const, (.), flip, ($), until,
+    asTypeOf,
+  )
diff --git a/src/Prelude/Error.hs b/src/Prelude/Error.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Error.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Error (
+    module Prelude.Error.IO,
+    module Prelude.Error.Misc,
+  ) where
+
+import Prelude.Error.IO
+import Prelude.Error.Misc
diff --git a/src/Prelude/Error/IO.hs b/src/Prelude/Error/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Error/IO.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Error.IO (
+    IOError, ioError, userError,
+  ) where
+
+import Prelude (
+    IOError, ioError, userError,
+  )
diff --git a/src/Prelude/Error/Misc.hs b/src/Prelude/Error/Misc.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Error/Misc.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Error.Misc (
+    error, undefined,
+  ) where
+
+import Prelude (
+    error, undefined,
+  )
diff --git a/src/Prelude/List.hs b/src/Prelude/List.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/List.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.List (
+    module Prelude.List.Partial,
+    module Prelude.List.Total,
+  ) where
+
+import Prelude.List.Partial
+import Prelude.List.Total
diff --git a/src/Prelude/List/Partial.hs b/src/Prelude/List/Partial.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/List/Partial.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.List.Partial (
+    head, last, tail, init,
+    (!!),
+    foldl1, foldr1,
+    maximum, minimum,
+    scanl1, scanr1,
+  ) where
+
+import Prelude (
+    head, last, tail, init,
+    (!!),
+    foldl1, foldr1,
+    maximum, minimum,
+    scanl1, scanr1,
+  )
diff --git a/src/Prelude/List/Total.hs b/src/Prelude/List/Total.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/List/Total.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.List.Total (
+    map, (++), filter,
+    null, length,
+    reverse,
+    foldl, foldr,
+    and, or, any, all,
+    sum, product,
+    concat, concatMap,
+    scanl, scanr,
+    iterate, repeat, replicate, cycle,
+    take, drop, splitAt, takeWhile, dropWhile, span, break,
+    elem, notElem, lookup,
+    zip, zip3, zipWith, zipWith3, unzip, unzip3,
+  ) where
+
+import Prelude (
+    map, (++), filter,
+    null, length,
+    reverse,
+    foldl, foldr,
+    and, or, any, all,
+    sum, product,
+    concat, concatMap,
+    scanl, scanr,
+    iterate, repeat, replicate, cycle,
+    take, drop, splitAt, takeWhile, dropWhile, span, break,
+    elem, notElem, lookup,
+    zip, zip3, zipWith, zipWith3, unzip, unzip3,
+  )
diff --git a/src/Prelude/Number.hs b/src/Prelude/Number.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Number.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Number (
+    module Prelude.Number.Float,
+    module Prelude.Number.Num,
+    module Prelude.Number.Real,
+  ) where
+
+import Prelude.Number.Float
+import Prelude.Number.Num
+import Prelude.Number.Real
diff --git a/src/Prelude/Number/Float.hs b/src/Prelude/Number/Float.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Number/Float.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Number.Float (
+    Float, Double,
+    Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),
+    RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,
+              encodeFloat, exponent, significand, scaleFloat, isNaN,
+              isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
+  ) where
+
+import Prelude (
+    Float, Double,
+    Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),
+    RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,
+              encodeFloat, exponent, significand, scaleFloat, isNaN,
+              isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
+  )
diff --git a/src/Prelude/Number/Num.hs b/src/Prelude/Number/Num.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Number/Num.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Number.Num (
+    Int, Integer,
+    Num((+), (-), (*), negate, abs, signum, fromInteger),
+    subtract,
+  ) where
+
+import Prelude (
+    Int, Integer,
+    Num((+), (-), (*), negate, abs, signum, fromInteger),
+    subtract,
+  )
diff --git a/src/Prelude/Number/Real.hs b/src/Prelude/Number/Real.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Number/Real.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Number.Real (
+    Rational,
+    Real(toRational),
+    Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
+    Fractional((/), recip, fromRational),
+    RealFrac(properFraction, truncate, round, ceiling, floor),
+    even, odd, gcd, lcm, (^), (^^),
+    fromIntegral, realToFrac,
+  ) where
+
+import Prelude (
+    Rational,
+    Real(toRational),
+    Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
+    Fractional((/), recip, fromRational),
+    RealFrac(properFraction, truncate, round, ceiling, floor),
+    even, odd, gcd, lcm, (^), (^^),
+    fromIntegral, realToFrac,
+  )
diff --git a/src/Prelude/Source/Control/Monad.hs b/src/Prelude/Source/Control/Monad.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Control/Monad.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Control.Monad (
+    mapM, mapM_, sequence, sequence_, (=<<),
+  ) where
+
+import Prelude (
+    mapM, mapM_, sequence, sequence_, (=<<),
+  )
diff --git a/src/Prelude/Source/Data/Either.hs b/src/Prelude/Source/Data/Either.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Data/Either.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Data.Either (
+    Either(Left, Right),
+    either,
+  ) where
+
+import Prelude (
+    Either(Left, Right),
+ 	either,
+  )
diff --git a/src/Prelude/Source/Data/List.hs b/src/Prelude/Source/Data/List.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Data/List.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Data.List (
+    foldl1,
+    sum, product,
+    maximum, minimum,
+    lines, words, unlines, unwords,
+  ) where
+
+import Prelude (
+    foldl1,
+    sum, product,
+    maximum, minimum,
+    lines, words, unlines, unwords,
+  )
diff --git a/src/Prelude/Source/Data/Maybe.hs b/src/Prelude/Source/Data/Maybe.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Data/Maybe.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Data.Maybe (
+    Maybe(Nothing, Just),
+    maybe
+  ) where
+
+import Prelude (
+    Maybe(Nothing, Just),
+    maybe
+  )
diff --git a/src/Prelude/Source/Data/Tuple.hs b/src/Prelude/Source/Data/Tuple.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Data/Tuple.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Data.Tuple (
+    fst, snd, curry, uncurry,
+  ) where
+
+import Prelude (
+    fst, snd, curry, uncurry,
+  )
diff --git a/src/Prelude/Source/GHC/Base.hs b/src/Prelude/Source/GHC/Base.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Base.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Base (
+    String,
+    Monad((>>=), (>>), return, fail),
+    Functor(fmap),
+    id, const, (.), flip, ($), until,
+    asTypeOf,
+    map, (++),
+    foldr,
+    IO,
+  ) where
+
+import Prelude (
+    String,
+    Monad((>>=), (>>), return, fail),
+    Functor(fmap),
+    id, const, (.), flip, ($), until,
+    asTypeOf,
+    map, (++),
+    foldr,
+    IO,
+  )
diff --git a/src/Prelude/Source/GHC/Classes.hs b/src/Prelude/Source/GHC/Classes.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Classes.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Classes (
+    (&&), (||), not, otherwise,
+    Eq((==), (/=)),
+    Ord(compare, (<), (<=), (>=), (>), max, min),
+  ) where
+
+import Prelude (
+    (&&), (||), not, otherwise,
+    Eq((==), (/=)),
+    Ord(compare, (<), (<=), (>=), (>), max, min),
+  )
diff --git a/src/Prelude/Source/GHC/Enum.hs b/src/Prelude/Source/GHC/Enum.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Enum.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Enum (
+    Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen, enumFromTo, enumFromThenTo),
+    Bounded(minBound, maxBound),
+  ) where
+
+import Prelude (
+    Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen, enumFromTo, enumFromThenTo),
+    Bounded(minBound, maxBound),
+  )
diff --git a/src/Prelude/Source/GHC/Err.hs b/src/Prelude/Source/GHC/Err.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Err.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Err (
+    error, undefined,
+  ) where
+
+import Prelude (
+    error, undefined,
+  )
diff --git a/src/Prelude/Source/GHC/Float.hs b/src/Prelude/Source/GHC/Float.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Float.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Float (
+    Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),
+    RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,
+              encodeFloat, exponent, significand, scaleFloat, isNaN,
+              isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
+  ) where
+
+import Prelude (
+    Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),
+    RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,
+              encodeFloat, exponent, significand, scaleFloat, isNaN,
+              isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
+  )
diff --git a/src/Prelude/Source/GHC/IO.hs b/src/Prelude/Source/GHC/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/IO.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.IO (
+    FilePath,
+  ) where
+
+import Prelude (
+    FilePath,
+  )
diff --git a/src/Prelude/Source/GHC/IO/Exception.hs b/src/Prelude/Source/GHC/IO/Exception.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/IO/Exception.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.IO.Exception (
+    IOError, ioError, userError,
+  ) where
+
+import Prelude (
+    IOError, ioError, userError,
+  )
diff --git a/src/Prelude/Source/GHC/List.hs b/src/Prelude/Source/GHC/List.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/List.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.List (
+    head, last, tail, init, null, length, (!!),
+    reverse,
+    foldl, foldr1,
+    and, or, any, all,
+    concat, concatMap,
+    scanl, scanl1, scanr, scanr1,
+    iterate, repeat, replicate, cycle,
+    take, drop, splitAt, takeWhile, dropWhile, span, break,
+    elem, notElem, lookup,
+    zip, zip3, zipWith, zipWith3, unzip, unzip3,
+  ) where
+
+import Prelude (
+    head, last, tail, init, null, length, (!!),
+    reverse,
+    foldl, foldr1,
+    and, or, any, all,
+    concat, concatMap,
+    scanl, scanl1, scanr, scanr1,
+    iterate, repeat, replicate, cycle,
+    take, drop, splitAt, takeWhile, dropWhile, span, break,
+    elem, notElem, lookup,
+    zip, zip3, zipWith, zipWith3, unzip, unzip3,
+  )
diff --git a/src/Prelude/Source/GHC/Num.hs b/src/Prelude/Source/GHC/Num.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Num.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Num (
+    Num((+), (-), (*), negate, abs, signum, fromInteger),
+    subtract,
+  ) where
+
+import Prelude (
+    Num((+), (-), (*), negate, abs, signum, fromInteger),
+    subtract,
+  )
diff --git a/src/Prelude/Source/GHC/Prim.hs b/src/Prelude/Source/GHC/Prim.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Prim.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Prim (
+    seq,
+  ) where
+
+import Prelude (
+    seq,
+  )
diff --git a/src/Prelude/Source/GHC/Real.hs b/src/Prelude/Source/GHC/Real.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Real.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Real (
+    Rational,
+    Real(toRational),
+    Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
+    Fractional((/), recip, fromRational),
+    RealFrac(properFraction, truncate, round, ceiling, floor),
+    even, odd, gcd, lcm, (^), (^^),
+    fromIntegral, realToFrac,
+  ) where
+
+import Prelude (
+    Rational,
+    Real(toRational),
+    Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
+    Fractional((/), recip, fromRational),
+    RealFrac(properFraction, truncate, round, ceiling, floor),
+    even, odd, gcd, lcm, (^), (^^),
+    fromIntegral, realToFrac,
+  )
diff --git a/src/Prelude/Source/GHC/Show.hs b/src/Prelude/Source/GHC/Show.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Show.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Show (
+    ShowS,
+    Show(showsPrec, showList, show),
+    shows,
+    showChar, showString, showParen,
+  ) where
+
+import Prelude (
+    ShowS,
+    Show(showsPrec, showList, show),
+    shows,
+    showChar, showString, showParen,
+  )
diff --git a/src/Prelude/Source/GHC/Types.hs b/src/Prelude/Source/GHC/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/GHC/Types.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.GHC.Types (
+    Bool(False, True),
+    Ordering(LT, EQ, GT),
+    Char,
+    Int, Integer, Float, Double,
+  ) where
+
+import Prelude (
+    Bool(False, True),
+    Ordering(LT, EQ, GT),
+    Char,
+    Int, Integer, Float, Double,
+  )
diff --git a/src/Prelude/Source/Prelude.hs b/src/Prelude/Source/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Prelude.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Prelude (
+    ($!),
+  ) where
+
+import Prelude (
+    ($!),
+  )
diff --git a/src/Prelude/Source/System/IO.hs b/src/Prelude/Source/System/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/System/IO.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.System.IO (
+    putChar,
+    putStr, putStrLn, print,
+    getChar,
+    getLine, getContents, interact,
+    readFile, writeFile, appendFile, readIO, readLn,
+  ) where
+
+import Prelude (
+    putChar,
+    putStr, putStrLn, print,
+    getChar,
+    getLine, getContents, interact,
+    readFile, writeFile, appendFile, readIO, readLn,
+  )
diff --git a/src/Prelude/Source/Text/ParserCombinators/ReadP.hs b/src/Prelude/Source/Text/ParserCombinators/ReadP.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Source/Text/ParserCombinators/ReadP.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Source.Text.ParserCombinators.ReadP (
+    ReadS,
+  ) where
+
+import Prelude (
+    ReadS,
+  )
diff --git a/src/Prelude/Strict.hs b/src/Prelude/Strict.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/Strict.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.Strict (
+    seq, ($!),
+  ) where
+
+import Prelude (
+    seq, ($!),
+  )
diff --git a/src/Prelude/String.hs b/src/Prelude/String.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/String.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.String (
+    module Prelude.String.Type,
+    module Prelude.String.Show,
+    module Prelude.String.Read,
+  ) where
+
+import Prelude.String.Type
+import Prelude.String.Show
+import Prelude.String.Read
diff --git a/src/Prelude/String/IO.hs b/src/Prelude/String/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/String/IO.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.String.IO (
+    putChar,
+    putStr, putStrLn, print,
+    getChar,
+    getLine, getContents, interact,
+    FilePath,
+    readFile, writeFile, appendFile, readIO, readLn,
+  ) where
+
+import Prelude (
+    putChar,
+    putStr, putStrLn, print,
+    getChar,
+    getLine, getContents, interact,
+    FilePath,
+    readFile, writeFile, appendFile, readIO, readLn,
+  )
diff --git a/src/Prelude/String/Read.hs b/src/Prelude/String/Read.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/String/Read.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.String.Read (
+    ReadS,
+    Read(readsPrec, readList),
+    reads, readParen, read, lex,
+  ) where
+
+import Prelude (
+    ReadS,
+    Read(readsPrec, readList),
+    reads, readParen, read, lex,
+  )
+
diff --git a/src/Prelude/String/Show.hs b/src/Prelude/String/Show.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/String/Show.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.String.Show (
+    ShowS,
+    Show(showsPrec, showList, show),
+    shows,
+    showChar, showString, showParen,
+  ) where
+
+import Prelude (
+    ShowS,
+    Show(showsPrec, showList, show),
+    shows,
+    showChar, showString, showParen,
+  )
diff --git a/src/Prelude/String/Type.hs b/src/Prelude/String/Type.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/String/Type.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.String.Type (
+    String,
+  ) where
+
+import Prelude (
+    String,
+  )
diff --git a/src/Prelude/TypeClass.hs b/src/Prelude/TypeClass.hs
new file mode 100644
--- /dev/null
+++ b/src/Prelude/TypeClass.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Prelude.TypeClass (
+    Eq((==), (/=)),
+    Ord(compare, (<), (<=), (>=), (>), max, min),
+    Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen, enumFromTo, enumFromThenTo),
+    Bounded(minBound, maxBound),
+    Monad((>>=), (>>), return, fail),
+    Functor(fmap),
+    mapM, mapM_, sequence, sequence_, (=<<),
+  ) where
+
+import Prelude (
+    Eq((==), (/=)),
+    Ord(compare, (<), (<=), (>=), (>), max, min),
+    Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen, enumFromTo, enumFromThenTo),
+    Bounded(minBound, maxBound),
+    Monad((>>=), (>>), return, fail),
+    Functor(fmap),
+    mapM, mapM_, sequence, sequence_, (=<<),
+  )
