-------------------------------------------------------------------------------- -- Functional Programming - Scratch Clone Project -------------------------------------------------------------------------------- -- Copyright (c) 2022 Michael B. Gale (michael@fpclass.online) -- -- This source code is subject to the terms and conditions found in the LICENSE -- file in the root directory of this source tree. -------------------------------------------------------------------------------- module Interpreter where -------------------------------------------------------------------------------- import Language -------------------------------------------------------------------------------- -- | In our memory, named locations map to values. type Memory = [(String, Int)] -- | Enumerates reasons for errors. data Err = DivByZeroError -- ^ Division by zero was attempted. | NegativeExponentError -- ^ Raising a number to a negative -- exponent was attempted. | UninitialisedMemory String -- ^ Tried to read from a variable -- that does not exist. deriving (Err -> Err -> Bool (Err -> Err -> Bool) -> (Err -> Err -> Bool) -> Eq Err forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Err -> Err -> Bool $c/= :: Err -> Err -> Bool == :: Err -> Err -> Bool $c== :: Err -> Err -> Bool Eq, Int -> Err -> ShowS [Err] -> ShowS Err -> String (Int -> Err -> ShowS) -> (Err -> String) -> ([Err] -> ShowS) -> Show Err forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Err] -> ShowS $cshowList :: [Err] -> ShowS show :: Err -> String $cshow :: Err -> String showsPrec :: Int -> Err -> ShowS $cshowsPrec :: Int -> Err -> ShowS Show) -------------------------------------------------------------------------------- -- | Given a program and the initial memory contents, determines -- what evaluating the program does to the memory. interpret :: Program -> Memory -> Either Err Memory interpret :: Program -> Memory -> Either Err Memory interpret Program p Memory mem = Either Err Memory forall a. HasCallStack => a undefined --------------------------------------------------------------------------------