-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A generic exploring interpreter for exploratory programming -- -- A generic exploring interpreter for exploratory programming @package exploring-interpreters @version 1.3.0.0 module Language.Explorer.Monadic data Explorer programs m configs output mkExplorer :: Language p m c o => Bool -> (c -> c -> Bool) -> (p -> c -> m (Maybe c, o)) -> c -> Explorer p m c o mkExplorerNoSharing :: Language p m c o => (p -> c -> m (Maybe c, o)) -> c -> Explorer p m c o execute :: Language p m c o => p -> Explorer p m c o -> m (Explorer p m c o, o) executeAll :: Language p m c o => [p] -> Explorer p m c o -> m (Explorer p m c o, o) revert :: Ref -> Explorer p m c o -> Maybe (Explorer p m c o) jump :: Ref -> Explorer p m c o -> Maybe (Explorer p m c o) toTree :: Explorer p m c o -> Tree (Ref, c) incomingEdges :: Ref -> Explorer p m c o -> [((Ref, c), (p, o), (Ref, c))] config :: Explorer programs m configs output -> configs execEnv :: Explorer programs m configs output -> Gr Ref (programs, output) currRef :: Explorer programs m configs output -> Ref -- | Returns all configurations that have not been the source for an -- execute action. This corresponds to leaves in a tree or nodes without -- an outbound-edge in a graph. leaves :: Explorer p m c o -> [(Ref, c)] type Ref = Int type Language p m c o = (Eq p, Eq o, Monad m, Monoid o) deref :: Explorer p m c o -> Ref -> Maybe c getTrace :: Explorer p m c o -> [((Ref, c), (p, o), (Ref, c))] getTraces :: Explorer p m c o -> [[((Ref, c), (p, o), (Ref, c))]] getPathsFromTo :: Explorer p m c o -> Ref -> Ref -> [[((Ref, c), (p, o), (Ref, c))]] getPathFromTo :: Explorer p m c o -> Ref -> Ref -> [((Ref, c), (p, o), (Ref, c))] executionGraph :: Explorer p m c o -> ((Ref, c), [(Ref, c)], [((Ref, c), (p, o), (Ref, c))]) shadowExecEnv :: Explorer programs m configs output -> Gr [Ref] (programs, output) eqClasses :: Explorer p m c o -> [[Ref]] initialRef :: Int fromExport :: Explorer p m c o -> (Ref, [(Ref, c)], [(Ref, Ref, (p, o))]) -> Explorer p m c o toExport :: Explorer p m c o -> (Ref, [(Ref, c)], [(Ref, Ref, (p, o))]) instance GHC.Show.Show Language.Explorer.Monadic.RevertableStatus module Language.Explorer.Pure type Explorer a b o = Explorer a Identity b o mkExplorer :: PureLanguage p c o => Bool -> (c -> c -> Bool) -> (p -> c -> (Maybe c, o)) -> c -> Explorer p c o mkExplorerNoSharing :: PureLanguage p c o => (p -> c -> (Maybe c, o)) -> c -> Explorer p c o execute :: PureLanguage p c o => p -> Explorer p c o -> (Explorer p c o, o) executeAll :: PureLanguage p c o => [p] -> Explorer p c o -> (Explorer p c o, o) revert :: Ref -> Explorer p c o -> Maybe (Explorer p c o) toTree :: Explorer p m c o -> Tree (Ref, c) incomingEdges :: Ref -> Explorer p c o -> [((Ref, c), (p, o), (Ref, c))] config :: Explorer a b o -> b currRef :: Explorer a b o -> Ref type Ref = Ref deref :: Explorer p c o -> Ref -> Maybe c leaves :: Explorer p c o -> [(Ref, c)] getTrace :: Explorer p c o -> [((Ref, c), (p, o), (Ref, c))] getTraces :: Explorer p c o -> [[((Ref, c), (p, o), (Ref, c))]] getPathsFromTo :: Explorer p c o -> Ref -> Ref -> [[((Ref, c), (p, o), (Ref, c))]] getPathFromTo :: Explorer p c o -> Ref -> Ref -> [((Ref, c), (p, o), (Ref, c))] executionGraph :: Explorer p c o -> ((Ref, c), [(Ref, c)], [((Ref, c), (p, o), (Ref, c))]) fromExport :: Explorer p c o -> (Ref, [(Ref, c)], [(Ref, Ref, (p, o))]) -> Explorer p c o toExport :: Explorer p c o -> (Ref, [(Ref, c)], [(Ref, Ref, (p, o))]) module Language.Explorer.Tools.Protocol type ExplorerParser p m c o = (Explorer p m c o, String -> Maybe p) type ProcessResult = Either ErrorMessage Value type EIP p m c o = RWST (String -> Maybe p) ByteString (Explorer p m c o) m class ExplorerPostValue p c o postExecute :: ExplorerPostValue p c o => Explorer p m c o -> Explorer p m c o -> o -> Value postJump :: ExplorerPostValue p c o => Explorer p m c o -> Explorer p m c o -> Value postRevert :: ExplorerPostValue p c o => Explorer p m c o -> Explorer p m c o -> [Ref] -> Value data RequestMessage RequestMessage :: String -> String -> String -> Maybe Value -> RequestMessage [$sel:jsonrpc:RequestMessage] :: RequestMessage -> String [$sel:req_id:RequestMessage] :: RequestMessage -> String [$sel:method:RequestMessage] :: RequestMessage -> String [$sel:params:RequestMessage] :: RequestMessage -> Maybe Value data ResponseMessage ResponseMessage :: String -> ProcessResult -> ResponseMessage [$sel:res_id:ResponseMessage] :: ResponseMessage -> String [$sel:body:ResponseMessage] :: ResponseMessage -> ProcessResult data ErrorMessage ErrorMessage :: Int -> String -> Maybe Value -> ErrorMessage [$sel:code:ErrorMessage] :: ErrorMessage -> Int [$sel:message:ErrorMessage] :: ErrorMessage -> String [$sel:error_data:ErrorMessage] :: ErrorMessage -> Maybe Value data JumpParams JumpParams :: Int -> JumpParams [$sel:jump_ref:JumpParams] :: JumpParams -> Int data JumpResult JumpResult :: Value -> JumpResult [$sel:jump_post:JumpResult] :: JumpResult -> Value data ExecuteParams ExecuteParams :: String -> ExecuteParams [$sel:program:ExecuteParams] :: ExecuteParams -> String data ExecuteResult ExecuteResult :: Int -> Value -> Value -> ExecuteResult [$sel:exec_ref:ExecuteResult] :: ExecuteResult -> Int [$sel:exec_out:ExecuteResult] :: ExecuteResult -> Value [$sel:exec_post:ExecuteResult] :: ExecuteResult -> Value data RevertParams RevertParams :: Int -> RevertParams [$sel:revert_ref:RevertParams] :: RevertParams -> Int data RevertResult RevertResult :: [Ref] -> Value -> RevertResult [$sel:revert_deleted:RevertResult] :: RevertResult -> [Ref] [$sel:post_revert:RevertResult] :: RevertResult -> Value data DerefParams DerefParams :: Int -> DerefParams [$sel:deref_ref:DerefParams] :: DerefParams -> Int data TraceParams TraceParams :: Int -> TraceParams [$sel:reference:TraceParams] :: TraceParams -> Int data Edge Edge :: Int -> Int -> EdgeLabel -> Edge [$sel:source:Edge] :: Edge -> Int [$sel:target:Edge] :: Edge -> Int [$sel:label:Edge] :: Edge -> EdgeLabel data EdgeLabel EdgeLabel :: Value -> Value -> EdgeLabel [$sel:program:EdgeLabel] :: EdgeLabel -> Value [$sel:mval:EdgeLabel] :: EdgeLabel -> Value data ExecutionTree ExecutionTree :: Int -> [Int] -> [Edge] -> ExecutionTree [$sel:current:ExecutionTree] :: ExecutionTree -> Int [$sel:references:ExecutionTree] :: ExecutionTree -> [Int] [$sel:edges:ExecutionTree] :: ExecutionTree -> [Edge] data PathParams PathParams :: Int -> Int -> PathParams [$sel:source:PathParams] :: PathParams -> Int [$sel:target:PathParams] :: PathParams -> Int parseErrorCode :: Int invalidRequestCode :: Integer methodNotFoundCode :: Int invalidParamsCode :: Int internalErrorCode :: Integer referenceNotInTreeCode :: Int referenceRevertInvalidCode :: Int programParseErrorCode :: Int pathNonExistingCode :: Int parseError :: ErrorMessage methodNotFound :: ErrorMessage invalidParams :: ErrorMessage ensureParameter :: Monad m => Maybe Value -> ExceptT ErrorMessage (EIP p m c o) Value fromResult :: Monad m => Result a -> Value -> ExceptT ErrorMessage (EIP p m c o) Value jump :: (Monad m, ExplorerPostValue p c o) => Value -> ExceptT ErrorMessage (EIP p m c o) Value execute :: (Eq o, Monoid o, ToJSON o, Eq p, ExplorerPostValue p c o) => Value -> ExceptT ErrorMessage (EIP p IO c o) Value allRefs :: Explorer p IO c o -> [(Ref, c)] revert :: (Eq o, Monoid o, Eq p, ExplorerPostValue p c o) => Value -> ExceptT ErrorMessage (EIP p IO c o) Value deref :: (Eq o, Monoid o, Eq p, ToJSON c) => Value -> ExceptT ErrorMessage (EIP p IO c o) Value executionTree :: (ToJSON o, ToJSON p) => ExceptT ErrorMessage (EIP p IO c o) Value getCurrentReference :: ExceptT ErrorMessage (EIP p IO c o) Value getAllReferences :: ExceptT ErrorMessage (EIP p IO c o) Value getTrace :: (ToJSON p, ToJSON o) => Maybe Value -> ExceptT ErrorMessage (EIP p IO c o) Value getPath :: (ToJSON o, ToJSON p) => Value -> ExceptT ErrorMessage (EIP p IO c o) Value getLeaves :: ExceptT ErrorMessage (EIP p IO c o) Value methodDispatch :: (Eq o, Monoid o, ToJSON o, ToJSON p, Eq p, ToJSON c, ExplorerPostValue p c o) => String -> Maybe Value -> ExceptT ErrorMessage (EIP p IO c o) Value handleRequest :: (Eq o, Monoid o, ToJSON o, ToJSON o, ToJSON p, Eq p, ToJSON c, ExplorerPostValue p c o) => Maybe RequestMessage -> EIP p IO c o ResponseMessage handleRequest' :: (Eq o, Monoid o, ToJSON o, Eq p, ToJSON p, ToJSON c, ExplorerPostValue p c o) => ByteString -> EIP p IO c o ResponseMessage invalidHeader :: ResponseMessage parseHeader :: Parser (Int, String) intProg :: Int -> Int -> IO (Maybe Int, ()) intParse :: String -> Maybe Int serve :: (Eq o, Monoid o, ToJSON o, Eq p, ToJSON p, ToJSON c, ExplorerPostValue p c o) => String -> Explorer p IO c o -> (String -> Maybe p) -> IO () acceptCommand :: (Monoid o, Eq o, Eq p, ToJSON o, ToJSON p, ToJSON c, ExplorerPostValue p c o) => Explorer p IO c o -> (String -> Maybe p) -> Socket -> ByteString -> IO (Explorer p IO c o) instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.RequestMessage instance GHC.Show.Show Language.Explorer.Tools.Protocol.RequestMessage instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.ErrorMessage instance GHC.Show.Show Language.Explorer.Tools.Protocol.ErrorMessage instance GHC.Show.Show Language.Explorer.Tools.Protocol.ResponseMessage instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.ExecuteParams instance GHC.Show.Show Language.Explorer.Tools.Protocol.ExecuteParams instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.TraceParams instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.EdgeLabel instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.Edge instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.ExecutionTree instance GHC.Generics.Generic Language.Explorer.Tools.Protocol.PathParams instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.PathParams instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.ExecutionTree instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.Edge instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.EdgeLabel instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.TraceParams instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.DerefParams instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.RevertResult instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.RevertParams instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.ExecuteResult instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.ExecuteParams instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.JumpResult instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.JumpParams instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.ResponseMessage instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.ErrorMessage instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.ErrorMessage instance Data.Aeson.Types.ToJSON.ToJSON Language.Explorer.Tools.Protocol.RequestMessage instance Data.Aeson.Types.FromJSON.FromJSON Language.Explorer.Tools.Protocol.RequestMessage module Language.Explorer.Tools.REPL type MetaTable p m c o = [(String, String -> Explorer p m c o -> m (Explorer p m c o))] type RParser p c = String -> c -> Maybe p type Prompt p m c o = Explorer p m c o -> String type MetaHandler p m c o = String -> Explorer p m c o -> m (Explorer p m c o) type OutputHandler m o = o -> m () type Repl p m c o = Prompt p m c o -> RParser p c -> String -> MetaTable p m c o -> MetaHandler p m c o -> OutputHandler m o -> Explorer p m c o -> m () handleJump :: MonadIO m => String -> Explorer p m c o -> m (Explorer p m c o) handleRevert :: MonadIO m => MetaHandler p m c o handleTree :: MonadIO m => MetaHandler p m c o metaTable :: MonadIO m => [(String, String -> Explorer p m c o -> m (Explorer p m c o))] constructMetaTable :: MonadIO m => String -> [(String, String -> Explorer p m c o -> m (Explorer p m c o))] repl :: (Eq p, Eq o, Monoid o, MonadIO m, MonadMask m) => Repl p m c o