-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | An implementation of Python 3. -- -- Berp is an implementation of Python 3, written in Haskell. It provides -- a compiler and an interpreter. In both cases the input Python program -- is translated into Haskell code. The compiler turns the Haskell code -- into machine code. The interpreter runs the Haskell code immediately -- via the GHCi interpreter. The user interface of the interpreter -- imitates the one provided by CPython. @package berp @version 0.0.2 -- | The current version of berp, exported as a Haskell string. module Berp.Version version :: String -- | Name mangling. -- -- We need to mangle Python's identifier names when we compiled them to -- Haskell names because: 1) Python allows some identifiers which are -- illegal in Haskell, such as leading upper case letters. 2) We -- introduce our own temporary variables into a compiled program. -- Name mangling helps to avoid accidental name clash. 3) We import many -- Haskell primitives into the compiled program. Name mangling helps to -- avoid accidental name clash. module Berp.Base.Mangle mangle :: String -> String deMangle :: String -> String -- | Hashing functions. module Berp.Base.Hash class Hash a hash :: (Hash a) => a -> Int type Hashed a = (Int, a) hashedStr :: String -> Q Exp instance Hash Integer instance Hash String -- | This module exports all the primitive functions which are needed by -- the compiled programs. Avoid putting extraneous exports in this file -- because it is imported by all compiled programs. module Berp.Base int :: Integer -> Object none :: Object string :: String -> Object true :: Object false :: Object def :: ObjectRef -> Arity -> Object -> ([ObjectRef] -> Eval Object) -> Eval Object lambda :: Arity -> ([ObjectRef] -> Eval Object) -> Eval Object (=:) :: ObjectRef -> Object -> Eval Object stmt :: Eval Object -> Eval Object ifThenElse :: Eval Object -> Eval Object -> Eval Object -> Eval Object ret :: Object -> Eval Object pass :: Eval Object break :: Eval Object continue :: Eval Object while :: Eval Object -> Eval Object -> Eval Object whileElse :: Eval Object -> Eval Object -> Eval Object -> Eval Object for :: ObjectRef -> Object -> Eval Object -> Eval Object forElse :: ObjectRef -> Object -> Eval Object -> Eval Object -> Eval Object ifThen :: Eval Object -> Eval Object -> Eval Object (@@) :: Object -> [Object] -> Eval Object tailCall :: Object -> [Object] -> Eval Object tuple :: [Object] -> Object read :: ObjectRef -> Eval Object var :: Ident -> Eval ObjectRef (%) :: Object -> Object -> Eval Object (+) :: Object -> Object -> Eval Object (-) :: Object -> Object -> Eval Object (*) :: Object -> Object -> Eval Object (.) :: Object -> Hashed String -> Eval Object (/) :: Object -> Object -> Eval Object (==) :: Object -> Object -> Eval Object (<) :: Object -> Object -> Eval Object (>) :: Object -> Object -> Eval Object (<=) :: Object -> Object -> Eval Object (>=) :: Object -> Object -> Eval Object and :: Object -> Object -> Eval Object or :: Object -> Object -> Eval Object klass :: Ident -> ObjectRef -> [Object] -> Eval [(Hashed String, ObjectRef)] -> Eval Object setattr :: Object -> Hashed String -> Object -> Eval Object list :: [Object] -> Eval Object dictionary :: [(Object, Object)] -> Eval Object subs :: Object -> Object -> Eval Object try :: Eval Object -> (Object -> Eval Object) -> Eval Object tryElse :: Eval Object -> (Object -> Eval Object) -> Eval Object -> Eval Object tryFinally :: Eval Object -> (Object -> Eval Object) -> Eval Object -> Eval Object tryElseFinally :: Eval Object -> (Object -> Eval Object) -> Eval Object -> Eval Object -> Eval Object except :: Object -> Object -> Eval Object -> Eval Object -> Eval Object exceptDefault :: Eval Object -> Eval Object -> Eval Object raise :: Object -> Eval Object reRaise :: Eval Object raiseFrom :: Object -> Object -> Eval Object -- | Lift a value. pure :: (Applicative f) => forall a. a -> f a pureObject :: Object -> Eval Object yield :: Object -> Eval Object mkGenerator :: Eval Object -> Eval Object unaryMinus :: Object -> Eval Object unaryPlus :: Object -> Eval Object invert :: Object -> Eval Object runStmt :: Eval Object -> IO Object runExpr :: Eval Object -> IO Object interpretStmt :: Eval Object -> IO () topVar :: Ident -> IO ObjectRef