Safe Haskell | None |
---|---|
Language | Haskell2010 |
- type TyName = Name Ty
- data Ty
- data Flag
- type Psi = Map Label Ty
- type Gamma = [(Register, Ty)]
- newtype Register = Register String
- reg1 :: Register
- rtmp :: Int -> Register
- newtype Label = Label (Name Heap)
- data TyApp a = TyApp a Ty
- sapps :: SmallVal -> [Ty] -> SmallVal
- data Pack a = Pack Ty a Ty
- data WordVal
- data SmallVal
- data HeapVal
- type Heap = Map Label HeapVal
- type RegisterFile = Map Register WordVal
- data Instruction
- data InstrSeq
- type Machine = (Heap, RegisterFile, InstrSeq)
- rInstrSeq1 :: forall ctx. (ctx Instruction, ctx InstrSeq) -> ctx SmallVal -> ctx Ty -> R1 ctx InstrSeq
- rInstrSeq :: R InstrSeq
- rInstruction1 :: forall ctx. (ctx Register, ctx Register, ctx SmallVal) -> (ctx Register, ctx SmallVal) -> (ctx Register, ctx Register, ctx Int) -> (ctx Register, ctx [Ty]) -> (ctx Register, ctx SmallVal) -> (ctx Register, ctx Register, ctx SmallVal) -> (ctx Register, ctx Int, ctx Register) -> (ctx Register, ctx Register, ctx SmallVal) -> (ctx TyName, ctx Register, ctx SmallVal) -> R1 ctx Instruction
- rInstruction :: R Instruction
- rHeapVal1 :: forall ctx. ctx [WordVal] -> (ctx [TyName], ctx Gamma, ctx InstrSeq) -> R1 ctx HeapVal
- rHeapVal :: R HeapVal
- rSmallVal1 :: forall ctx. ctx Register -> ctx WordVal -> ctx (TyApp SmallVal) -> ctx (Pack SmallVal) -> R1 ctx SmallVal
- rSmallVal :: R SmallVal
- rWordVal1 :: forall ctx. ctx Label -> ctx Int -> ctx Ty -> ctx (TyApp WordVal) -> ctx (Pack WordVal) -> R1 ctx WordVal
- rWordVal :: R WordVal
- rPack1 :: forall ctx a. Rep a => (ctx Ty, ctx a, ctx Ty) -> R1 ctx (Pack a)
- rPack :: forall a. Rep a => R (Pack a)
- rTyApp1 :: forall ctx a. Rep a => (ctx a, ctx Ty) -> R1 ctx (TyApp a)
- rTyApp :: forall a. Rep a => R (TyApp a)
- rLabel1 :: forall ctx. ctx (Name Heap) -> R1 ctx Label
- rLabel :: R Label
- rRegister1 :: forall ctx. ctx String -> R1 ctx Register
- rRegister :: R Register
- rFlag1 :: forall ctx. () -> () -> R1 ctx Flag
- rFlag :: R Flag
- rTy1 :: forall ctx. ctx TyName -> () -> ctx (Bind [TyName] Gamma) -> ctx [(Ty, Flag)] -> ctx (Bind TyName Ty) -> R1 ctx Ty
- rTy :: R Ty
- freshForHeap :: Heap -> Label
- getIntReg :: RegisterFile -> Register -> M Int
- arith :: (Int -> Int -> Int) -> RegisterFile -> Register -> SmallVal -> M WordVal
- loadReg :: RegisterFile -> SmallVal -> M (WordVal, [Ty])
- tyApp :: WordVal -> [Ty] -> WordVal
- jmpReg :: Heap -> RegisterFile -> SmallVal -> M Machine
- step :: Machine -> M Machine
- run :: Machine -> M Machine
- type Delta = [TyName]
- data Ctx = Ctx {}
- emptyCtx :: Ctx
- checkTyVar :: Ctx -> TyName -> M ()
- extendTy :: TyName -> Ctx -> Ctx
- extendTys :: [TyName] -> Ctx -> Ctx
- insertGamma :: Register -> Ty -> Gamma -> Gamma
- lookupHeapLabel :: Ctx -> Label -> M Ty
- lookupReg :: Ctx -> Register -> M Ty
- tcty :: Ctx -> Ty -> M ()
- tcPsi :: Ctx -> Psi -> M ()
- tcGamma :: Ctx -> Gamma -> M ()
- subtype :: Ctx -> Ty -> Ty -> M ()
- subGamma :: Ctx -> Gamma -> Gamma -> M ()
- typeCheckHeap :: Heap -> Psi -> M ()
- tcWordVal :: Ctx -> WordVal -> M Ty
- tcApp :: (Ctx -> a -> M Ty) -> Ctx -> TyApp a -> M Ty
- tcPack :: Display a => (Ctx -> a -> M Ty) -> Ctx -> Pack a -> M Ty
- tcSmallVal :: Ctx -> SmallVal -> M Ty
- tcInstrSeq :: Ctx -> InstrSeq -> M ()
- tcArith :: Ctx -> Register -> Register -> SmallVal -> M Ctx
- tcInstr :: Ctx -> Instruction -> M Ctx
- progcheck :: Machine -> M ()
- dispArith :: (Display t, Show a1, Show a) => String -> a -> a1 -> t -> DM Doc
Documentation
Show Ty Source # | |
Rep Ty Source # | |
Alpha Ty Source # | |
Display Ty Source # | |
(Sat (ctx0 TyName), Sat (ctx0 (Bind [TyName] Gamma)), Sat (ctx0 [(Ty, Flag)]), Sat (ctx0 (Bind TyName Ty))) => Rep1 ctx0 Ty Source # | |
Subst Ty InstrSeq Source # | |
Subst Ty Instruction Source # | |
Subst Ty HeapVal Source # | |
Subst Ty SmallVal Source # | |
Subst Ty WordVal Source # | |
Subst Ty Label Source # | |
Subst Ty Register Source # | |
Subst Ty Flag Source # | |
Subst Ty Ty Source # | |
Subst Ty a => Subst Ty (Pack a) Source # | |
Subst Ty a => Subst Ty (TyApp a) Source # | |
(Rep a, Subst Ty b) => Subst Ty (Map a b) Source # | |
Display (Ty, Flag) Source # | |
Enum Register Source # | |
Eq Register Source # | |
Ord Register Source # | |
Show Register Source # | |
Rep Register Source # | |
Alpha Register Source # | |
Sat (ctx0 String) => Rep1 ctx0 Register Source # | |
Subst Ty Register Source # | |
Display a => Display [(Register, a)] Source # | |
Alpha b => Alpha (Map Register b) Source # | |
Display a => Display (Map Register a) Source # | |
Display (Heap, RegisterFile, InstrSeq) Source # | |
data Instruction Source #
rInstrSeq1 :: forall ctx. (ctx Instruction, ctx InstrSeq) -> ctx SmallVal -> ctx Ty -> R1 ctx InstrSeq Source #
rInstruction1 :: forall ctx. (ctx Register, ctx Register, ctx SmallVal) -> (ctx Register, ctx SmallVal) -> (ctx Register, ctx Register, ctx Int) -> (ctx Register, ctx [Ty]) -> (ctx Register, ctx SmallVal) -> (ctx Register, ctx Register, ctx SmallVal) -> (ctx Register, ctx Int, ctx Register) -> (ctx Register, ctx Register, ctx SmallVal) -> (ctx TyName, ctx Register, ctx SmallVal) -> R1 ctx Instruction Source #
rHeapVal1 :: forall ctx. ctx [WordVal] -> (ctx [TyName], ctx Gamma, ctx InstrSeq) -> R1 ctx HeapVal Source #
rSmallVal1 :: forall ctx. ctx Register -> ctx WordVal -> ctx (TyApp SmallVal) -> ctx (Pack SmallVal) -> R1 ctx SmallVal Source #
rWordVal1 :: forall ctx. ctx Label -> ctx Int -> ctx Ty -> ctx (TyApp WordVal) -> ctx (Pack WordVal) -> R1 ctx WordVal Source #
rTy1 :: forall ctx. ctx TyName -> () -> ctx (Bind [TyName] Gamma) -> ctx [(Ty, Flag)] -> ctx (Bind TyName Ty) -> R1 ctx Ty Source #
freshForHeap :: Heap -> Label Source #