packages feed

exploring-interpreters 0.2.0.0 → 0.3.0.0

raw patch · 6 files changed

+22/−24 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Language.Explorer.Monadic: mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b, o)) -> b -> Explorer a m b o
+ Language.Explorer.Monadic: mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b, o)) -> b -> Explorer a m b o
- Language.Explorer.Monadic: mkExplorerGraph :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b, o)) -> b -> Explorer a m b o
+ Language.Explorer.Monadic: mkExplorerGraph :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b, o)) -> b -> Explorer a m b o
- Language.Explorer.Monadic: mkExplorerStack :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b, o)) -> b -> Explorer a m b o
+ Language.Explorer.Monadic: mkExplorerStack :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b, o)) -> b -> Explorer a m b o
- Language.Explorer.Monadic: mkExplorerTree :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b, o)) -> b -> Explorer a m b o
+ Language.Explorer.Monadic: mkExplorerTree :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b, o)) -> b -> Explorer a m b o
- Language.Explorer.Pure: mkExplorerGSS :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b, o)) -> b -> Explorer a b o
+ Language.Explorer.Pure: mkExplorerGSS :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b, o)) -> b -> Explorer a b o
- Language.Explorer.Pure: mkExplorerGraph :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b, o)) -> b -> Explorer a b o
+ Language.Explorer.Pure: mkExplorerGraph :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b, o)) -> b -> Explorer a b o
- Language.Explorer.Pure: mkExplorerStack :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b, o)) -> b -> Explorer a b o
+ Language.Explorer.Pure: mkExplorerStack :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b, o)) -> b -> Explorer a b o
- Language.Explorer.Pure: mkExplorerTree :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b, o)) -> b -> Explorer a b o
+ Language.Explorer.Pure: mkExplorerTree :: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b, o)) -> b -> Explorer a b o

Files

CHANGELOG.md view
@@ -2,3 +2,7 @@  ## 0.2.0.0 -- 2021-03-15 * First official version. ++## 0.3.0.0 -- 2021-03-16+* Require that definitional interpreters return configurations in the Maybe monad.+  This adds support for run-time errors by returning Nothing when an errors occurs.
Language/Explorer/Basic.hs view
@@ -45,20 +45,14 @@ deref = ExplorerM.deref  -- This should be able with func composition.-wrap :: Monad m => (a -> b -> b) -> a -> b -> m (b, ())+wrap :: Monad m => (a -> b -> Maybe b) -> a -> b -> m (Maybe b, ()) wrap def p e = return $ (def p e, ())  -- Constructor for a exploring interpreter.-mkExplorerStack:: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b) => (a -> b -> Maybe b) -> b -> Explorer a b mkExplorerStack definterp conf = ExplorerM.mkExplorerStack (wrap definterp) conf--mkExplorerTree:: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b mkExplorerTree definterp conf = ExplorerM.mkExplorerTree (wrap definterp) conf--mkExplorerGraph :: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b mkExplorerGraph definterp conf = ExplorerM.mkExplorerGraph (wrap definterp) conf--mkExplorerGSS :: (Show a, Eq a, Eq b) => (a -> b -> b) -> b -> Explorer a b mkExplorerGSS definterp conf = ExplorerM.mkExplorerGSS (wrap definterp) conf  execute :: (Eq c, Eq p) =>  p -> Explorer p c -> Explorer p c
Language/Explorer/Monadic.hs view
@@ -41,7 +41,7 @@     Explorer :: (Show programs, Eq programs, Eq configs, Monad m, Monoid output) =>         { sharing :: Bool         , backTracking :: Bool-        , defInterp :: programs -> configs -> m (configs, output)+        , defInterp :: programs -> configs -> m (Maybe configs, output)         , config :: configs -- Cache the config         , currRef :: Ref         , genRef :: Ref@@ -50,7 +50,7 @@         } -> Explorer programs m configs output  mkExplorer :: (Show a, Eq a, Eq b, Monad m, Monoid o) =>-  Bool -> Bool -> (a -> b -> m (b,o)) -> b -> Explorer a m b o+  Bool -> Bool -> (a -> b -> m (Maybe b,o)) -> b -> Explorer a m b o mkExplorer share backtrack definterp conf = Explorer     { defInterp = definterp     , config = conf@@ -65,7 +65,7 @@ initialRef :: Int initialRef = 1 -mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (b,o)) -> b -> Explorer a m b o+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS :: (Show a, Eq a, Eq b, Monad m, Monoid o) => (a -> b -> m (Maybe b,o)) -> b -> Explorer a m b o mkExplorerStack = mkExplorer False True mkExplorerTree  = mkExplorer False False mkExplorerGraph = mkExplorer True False@@ -95,11 +95,11 @@         else addNewPath e p output newconf  execute :: (Eq c, Eq p, Eq o, Monad m, Monoid o) =>  p -> Explorer p m c o -> m (Explorer p m c o, o)-execute p e = do-    (newconf,out) <- defInterp e p (config e)-    return $ (updateConf e (p, newconf, out), out)--+execute p e =+  do (mcfg, o) <- defInterp e p (config e)+     case mcfg of+       Just cfg -> return $ (updateConf e (p, cfg, o), o)+       Nothing  -> return (e, o)  executeAll :: (Eq c, Eq p, Eq o, Monad m, Monoid o) => [p] -> Explorer p m c o -> m (Explorer p m c o, o) executeAll ps exp = foldlM executeCollect (exp, mempty) ps
Language/Explorer/Pure.hs view
@@ -42,10 +42,10 @@ deref :: Explorer p c o -> Ref -> Maybe c deref = ExplorerM.deref -wrap :: (Monad m, Monoid o) => (a -> b -> (b,o)) -> a -> b -> m (b, o)+wrap :: (Monad m, Monoid o) => (a -> b -> (Maybe b,o)) -> a -> b -> m (Maybe b, o) wrap def p e = return $ def p e -mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS:: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (b,o)) -> b -> Explorer a b o+mkExplorerStack, mkExplorerTree, mkExplorerGraph, mkExplorerGSS:: (Show a, Eq a, Eq b, Monoid o) => (a -> b -> (Maybe b,o)) -> b -> Explorer a b o mkExplorerStack definterp conf = ExplorerM.mkExplorerStack (wrap definterp) conf mkExplorerTree definterp conf = ExplorerM.mkExplorerTree (wrap definterp) conf mkExplorerGraph definterp conf = ExplorerM.mkExplorerGraph (wrap definterp) conf
examples/Whilelang.hs view
@@ -112,13 +112,13 @@ initialConfig = Config {cfgStore = Map.empty, cfgOutput = []}  -- Definitial interpreter for the while language.-definterp :: Command -> Config -> Config-definterp c cfg = cfg {cfgStore = newstore, cfgOutput = cfgOutput cfg ++ newout}+definterp :: Command -> Config -> Maybe Config+definterp c cfg = Just cfg {cfgStore = newstore, cfgOutput = cfgOutput cfg ++ newout}     where ((_, newout), newstore) = runState (runWriterT (evalCommand' c)) (cfgStore cfg)  -definterpO :: Command -> Config -> (Config, [String])-definterpO c cfg = (cfg {cfgStore = newstore}, newout)+definterpO :: Command -> Config -> (Maybe Config, [String])+definterpO c cfg = (Just $ cfg {cfgStore = newstore}, newout)     where ((_, newout), newstore) = runState (runWriterT (evalCommand' c)) (cfgStore cfg)  @@ -218,7 +218,7 @@ whileGraph = E.mkExplorerGraph definterp initialConfig  whileGraphM :: WhileExplorerM-whileGraphM = EM.mkExplorerGraph (\p c -> (\c -> (c,())) <$> definterpM p c) initialConfig+whileGraphM = EM.mkExplorerGraph (\p c -> (\c -> (Just c,())) <$> definterpM p c) initialConfig  whileGraphO :: WhileExplorerO whileGraphO = EP.mkExplorerGraph definterpO initialConfig
exploring-interpreters.cabal view
@@ -1,7 +1,7 @@ cabal-version:       >=1.10  name:                exploring-interpreters-version:             0.2.0.0+version:             0.3.0.0 synopsis:            A generic exploring interpreter for exploratory programming -- synopsis: -- description: