simpleprelude (empty) → 1.0
raw patch · 7 files changed
+363/−0 lines, 7 filesdep +basedep +ghc-pathsdep +processsetup-changed
Dependencies added: base, ghc-paths, process
Files
- LICENSE +30/−0
- README +10/−0
- Setup.hs +2/−0
- simpleprelude.cabal +65/−0
- src/Prelude.hs +232/−0
- src/SimpleGHC.hs +12/−0
- src/SimpleGHCi.hs +12/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Jean-Marie Gaillourdet++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Jean-Marie Gaillourdet nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README view
@@ -0,0 +1,10 @@+simpleprelude provides an alternative Prelude module for teaching as+well as wrappers for ghc, and ghci to use them.++The simplified Prelude omits the type classes Num, Integral, and+Ord. Instead it provides monomorphically typed arithmetic operators on+Integer.++It also provides two executables: simple-ghc and simple-ghci which are+wrappers around ghc and ghci. They are pre-configured to use the+Prelude module of this library instead of base's Prelude module.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ simpleprelude.cabal view
@@ -0,0 +1,65 @@+Name: simpleprelude++Version: 1.0++Synopsis: A simplified Haskell prelude for teaching++Description: simpleprelude provides an alternative Prelude+ module for teaching as well as wrappers for ghc,+ and ghci to use them.+ .+ The simplified Prelude omits the type classes+ Num, Integral, and Ord. Instead it provides+ monomorphically typed arithmetic operators on+ Integer.+ .+ It also provides two executables: simple-ghc and+ simple-ghci which are wrappers around ghc and+ ghci. They are pre-configured to use the Prelude+ module of this library instead of base's Prelude+ module.++License: BSD3++License-file: LICENSE++Author: Jean-Marie Gaillourdet++Maintainer: jmg@cs.uni-kl.de++Category: Teaching++Build-type: Simple++Extra-source-files: LICENSE, README++-- Constraint on the version of Cabal needed to build this package.+Cabal-version: >=1.6+++Library+ Exposed-modules: Prelude+ exposed: False+ + Build-depends: base > 3 && <5+ Hs-Source-Dirs: src+ + +Executable simple-ghc+ Main-Is: SimpleGHC.hs+ Build-depends: base,+ process >= 1.0 && < 1.2,+ ghc-paths >= 0.1 && < 0.2+ Hs-Source-Dirs: src+++Executable simple-ghci+ Main-Is: SimpleGHCi.hs+ Build-depends: base,+ process >= 1.0 && < 1.2,+ ghc-paths >= 0.1 && < 0.2+ Hs-Source-Dirs: src++Source-Repository head+ Type: Mercurial+ Location: https://softech.cs.uni-kl.de/hg/public/simpleprelude
+ src/Prelude.hs view
@@ -0,0 +1,232 @@+{-# LANGUAGE PackageImports, NoImplicitPrelude #-}++module Prelude (++ -- * Standard types, classes and related functions++ -- ** Basic data types+ Bool(False, True),+ (&&), (||), not, otherwise,++ Maybe(Nothing, Just),+ maybe,++ Either(Left, Right),+ either,++ Ordering(LT, EQ, GT),+ Char, String,++ -- *** Tuples+ fst, snd, curry, uncurry,++ -- ** Basic type classes+ -- removed: Eq((==), (/=)),+ (==), (/=),+ -- removed: Ord(compare, (<), (<=), (>=), (>), max, min),+ compare, (<), (<=), (>=), (>), max, min,+ Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen,+ enumFromTo, enumFromThenTo),+ Bounded(minBound, maxBound),++ -- ** Numbers++ -- *** Numeric types+ -- removed: Int, Integer, Float, Double,+ -- removed: Rational,+ Integer,++ -- *** Numeric type classes+ -- removed: Num((+), (-), (*), negate, abs, signum, fromInteger),+ (+), (-), (*), negate, abs, signum, fromInteger,+ + -- removed: Real(toRational),+ -- removed: Integral(quot, rem, div, mod, quotRem, divMod, toInteger),+ quot, rem, div, mod, quotRem, divMod, toInteger,+ + -- removed: Fractional((/), recip, fromRational),+ -- removed: Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan,+ -- removed: asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),+ -- removed: RealFrac(properFraction, truncate, round, ceiling, floor),+ -- removed: RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,+ -- removed: encodeFloat, exponent, significand, scaleFloat, isNaN,+ -- removed: isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),++ -- *** Numeric functions+ subtract, even, odd, gcd, lcm, (^), + fromIntegral, + + -- removed: realToFrac, (^^),++ -- ** Monads and functors+ Monad((>>=), (>>), return, fail),+ Functor(fmap),+ mapM, mapM_, sequence, sequence_, (=<<),++ -- ** Miscellaneous functions+ id, const, (.), flip, ($), until,+ asTypeOf, error, undefined,+ seq, ($!),++ -- * List operations+ map, (++), filter,+ head, last, tail, init, null, length, (!!),+ reverse,+ -- ** Reducing lists (folds)+ foldl, foldl1, foldr, foldr1,+ -- *** Special folds+ and, or, any, all,+ sum, product,+ concat, concatMap,+ maximum, minimum,+ -- ** Building lists+ -- *** Scans+ scanl, scanl1, scanr, scanr1,+ -- *** Infinite lists+ iterate, repeat, replicate, cycle,+ -- ** Sublists+ take, drop, splitAt, takeWhile, dropWhile, span, break,+ -- ** Searching lists+ elem, notElem, lookup,+ -- ** Zipping and unzipping lists+ zip, zip3, zipWith, zipWith3, unzip, unzip3,+ -- ** Functions on strings+ lines, words, unlines, unwords,++ -- * Converting to and from @String@+ -- ** Converting to @String@+ ShowS,+ Show(showsPrec, showList, show),+ shows,+ showChar, showString, showParen,+ -- ** Converting from @String@+ ReadS,+ Read(readsPrec, readList),+ reads, readParen, read, lex,++ -- * Basic Input and output+ IO,+ -- ** Simple I\/O operations+ -- All I/O functions defined here are character oriented. The+ -- treatment of the newline character will vary on different systems.+ -- For example, two characters of input, return and linefeed, may+ -- read as a single newline character. These functions cannot be+ -- used portably for binary I/O.+ -- *** Output functions+ putChar,+ putStr, putStrLn, print,+ -- *** Input functions+ getChar,+ getLine, getContents, interact,+ -- *** Files+ FilePath,+ readFile, writeFile, appendFile, readIO, readLn,+ -- ** Exception handling in the I\/O monad+ IOError, ioError, userError, catch++ )+where++import "base" Prelude hiding ( Num(..), Integral(..), subtract, even+ , odd, gcd, lcm, (^)+ , length, (!!), sum, product+ , take, drop+ , Ord(..), Eq(..)+ )+import qualified "base" Prelude as P+import qualified Data.List as L++-- -------+-- - Num -+-- -------++(+), (-), (*) :: Integer -> Integer -> Integer+(+) = (P.+)+(-) = (P.-)+(*) = (P.*)+++negate, abs, signum, fromInteger :: Integer -> Integer+negate = P.negate+abs = P.abs+signum = P.signum+fromInteger = P.fromInteger+++-- ------------+-- - Integral -+-- ------------++quot, rem, div, mod :: Integer -> Integer -> Integer+quot = P.quot+rem = P.rem+div = P.div+mod = P.mod+++quotRem, divMod :: Integer -> Integer -> (Integer, Integer)+quotRem = P.quotRem+divMod = P.divMod+ +toInteger :: Integer -> Integer+toInteger = P.toInteger++-- ---------------------+-- - numeric functions -+-- ---------------------++subtract, gcd, lcm, (^) :: Integer -> Integer -> Integer+subtract = P.subtract+gcd = P.gcd+lcm = P.lcm+(^) = (P.^)++even, odd :: Integer -> Bool+even = P.even+odd = P.odd+++-- ------------------+-- - list functions -+-- ------------------++length :: [a] -> Integer+length = L.genericLength++(!!) :: [a] -> Integer -> a+(!!) = L.genericIndex++sum, product :: [Integer] -> Integer+sum = P.sum+product = P.product++take, drop :: Integer -> [a] -> [a]+take = L.genericTake+drop = L.genericDrop+++-- -------+-- - Ord -+-- -------++compare :: Integer -> Integer -> Ordering+compare = P.compare++(<), (<=), (>=), (>) :: Integer -> Integer -> Bool+(<) = (P.<)+(<=) = (P.<=)+(>=) = (P.>=)+(>) = (P.>)++max, min :: Integer -> Integer -> Integer+max = P.max+min = P.min+++-- ------+-- - Eq -+-- ------++(==), (/=) :: Integer -> Integer -> Bool+(==) = (P.==)+(/=) = (P./=)
+ src/SimpleGHC.hs view
@@ -0,0 +1,12 @@++import Common ( additionalArgs )+import GHC.Paths ( ghc )+import System.Environment ( getArgs )+import System.Exit ( exitWith )+import System.Process ( rawSystem )+++main :: IO ()+main = do+ args <- getArgs+ exitWith =<< rawSystem ghc (additionalArgs ++ args)
+ src/SimpleGHCi.hs view
@@ -0,0 +1,12 @@++import Common ( additionalArgs )+import GHC.Paths ( ghc )+import System.Environment ( getArgs )+import System.Exit ( exitWith )+import System.Process ( rawSystem )+++main :: IO ()+main = do+ args <- getArgs+ exitWith =<< rawSystem ghc (["--interactive"] ++ additionalArgs ++ args)