haal 0.2.0.0 → 0.3.0.0
raw patch · 12 files changed
+69/−56 lines, 12 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Haal.Automaton.MealyAutomaton: instance Haal.BlackBox.Automaton Haal.Automaton.MealyAutomaton.MealyAutomaton s i o
- Haal.Automaton.MealyAutomaton: instance Haal.BlackBox.SUL (Haal.Automaton.MealyAutomaton.MealyAutomaton s) Data.Functor.Identity.Identity i o
- Haal.Automaton.MooreAutomaton: instance Haal.BlackBox.Automaton Haal.Automaton.MooreAutomaton.MooreAutomaton s i o
- Haal.Automaton.MooreAutomaton: instance Haal.BlackBox.SUL (Haal.Automaton.MooreAutomaton.MooreAutomaton s) Data.Functor.Identity.Identity i o
+ Haal.Automaton.MealyAutomaton: instance Haal.BlackBox.Automaton Haal.Automaton.MealyAutomaton.MealyAutomaton s
+ Haal.Automaton.MealyAutomaton: instance Haal.BlackBox.SUL (Haal.Automaton.MealyAutomaton.MealyAutomaton s) Data.Functor.Identity.Identity
+ Haal.Automaton.MooreAutomaton: instance Haal.BlackBox.Automaton Haal.Automaton.MooreAutomaton.MooreAutomaton s
+ Haal.Automaton.MooreAutomaton: instance Haal.BlackBox.SUL (Haal.Automaton.MooreAutomaton.MooreAutomaton s) Data.Functor.Identity.Identity
- Haal.Automaton.MealyAutomaton: mealyTransitions :: (Ord s, FiniteOrd i) => MealyAutomaton s i o -> Map (s, i) (s, o)
+ Haal.Automaton.MealyAutomaton: mealyTransitions :: forall s i o. (Ord s, FiniteOrd i) => MealyAutomaton s i o -> Map (s, i) (s, o)
- Haal.BlackBox: accessSequences :: forall s i o aut. (Automaton aut s i o, FiniteOrd i, Ord s) => aut s i o -> Map s [i]
+ Haal.BlackBox: accessSequences :: forall s i o aut. (Automaton aut s, FiniteOrd i, Ord s) => aut s i o -> Map s [i]
- Haal.BlackBox: class SUL aut s Identity i o => Automaton (aut :: Type -> Type -> Type -> Type) s i o
+ Haal.BlackBox: class (SUL (aut s) Identity) => Automaton aut s
- Haal.BlackBox: class Monad m => SUL (sul :: Type -> Type -> Type) (m :: Type -> Type) i o
+ Haal.BlackBox: class (Monad m) => SUL sul m
- Haal.BlackBox: current :: Automaton aut s i o => aut s i o -> s
+ Haal.BlackBox: current :: Automaton aut s => aut s i o -> s
- Haal.BlackBox: distinguish :: (Automaton aut s i o, FiniteOrd i, Ord s, Eq o) => aut s i o -> s -> s -> [i]
+ Haal.BlackBox: distinguish :: (Automaton aut s, FiniteOrd i, Ord s, Eq o) => aut s i o -> s -> s -> [i]
- Haal.BlackBox: globalCharacterizingSet :: (Automaton aut s i o, FiniteOrd i, FiniteOrd s, Eq o) => aut s i o -> Set [i]
+ Haal.BlackBox: globalCharacterizingSet :: (Automaton aut s, FiniteOrd i, FiniteOrd s, Eq o) => aut s i o -> Set [i]
- Haal.BlackBox: initial :: Automaton aut s i o => aut s i o -> s
+ Haal.BlackBox: initial :: Automaton aut s => aut s i o -> s
- Haal.BlackBox: localCharacterizingSet :: (Automaton aut s i o, FiniteOrd i, FiniteOrd s, Eq o) => aut s i o -> s -> Set [i]
+ Haal.BlackBox: localCharacterizingSet :: (Automaton aut s, FiniteOrd i, FiniteOrd s, Eq o) => aut s i o -> s -> Set [i]
- Haal.BlackBox: reachable :: forall s i o aut. (Automaton aut s i o, Ord s, FiniteOrd i) => aut s i o -> Set s
+ Haal.BlackBox: reachable :: forall s i o aut. (Automaton aut s, Ord s, FiniteOrd i) => aut s i o -> Set s
- Haal.BlackBox: reset :: SUL sul m i o => sul i o -> m (sul i o)
+ Haal.BlackBox: reset :: SUL sul m => sul i o -> m (sul i o)
- Haal.BlackBox: resetPure :: SUL sul Identity i o => sul i o -> sul i o
+ Haal.BlackBox: resetPure :: SUL sul Identity => sul i o -> sul i o
- Haal.BlackBox: states :: Automaton aut s i o => aut s i o -> Set s
+ Haal.BlackBox: states :: (Automaton aut s, FiniteOrd s) => aut s i o -> Set s
- Haal.BlackBox: step :: SUL sul m i o => sul i o -> i -> m (sul i o, o)
+ Haal.BlackBox: step :: SUL sul m => sul i o -> i -> m (sul i o, o)
- Haal.BlackBox: stepPure :: SUL sul Identity i o => sul i o -> i -> (sul i o, o)
+ Haal.BlackBox: stepPure :: SUL sul Identity => sul i o -> i -> (sul i o, o)
- Haal.BlackBox: transitions :: Automaton aut s i o => aut s i o -> Map (s, i) (s, o)
+ Haal.BlackBox: transitions :: (Automaton aut s, FiniteOrd i, FiniteOrd s) => aut s i o -> Map (s, i) (s, o)
- Haal.BlackBox: update :: Automaton aut s i o => aut s i o -> s -> aut s i o
+ Haal.BlackBox: update :: Automaton aut s => aut s i o -> s -> aut s i o
- Haal.BlackBox: walk :: SUL sul m i o => sul i o -> [i] -> m (sul i o, [o])
+ Haal.BlackBox: walk :: SUL sul m => sul i o -> [i] -> m (sul i o, [o])
- Haal.BlackBox: walkPure :: SUL sul Identity i o => sul i o -> [i] -> (sul i o, [o])
+ Haal.BlackBox: walkPure :: SUL sul Identity => sul i o -> [i] -> (sul i o, [o])
- Haal.EquivalenceOracle.WMethod: wmethodSuiteSize :: (Automaton aut s i o, FiniteOrd i, FiniteOrd s, Eq o) => WMethod -> aut s i o -> Int
+ Haal.EquivalenceOracle.WMethod: wmethodSuiteSize :: (Automaton aut s, FiniteOrd i, FiniteOrd s, Eq o) => WMethod -> aut s i o -> Int
- Haal.EquivalenceOracle.WpMethod: wpmethodSuiteSize :: (Automaton aut s i o, FiniteOrd i, FiniteOrd s, Eq o) => WpMethod -> aut s i o -> Int
+ Haal.EquivalenceOracle.WpMethod: wpmethodSuiteSize :: (Automaton aut s, FiniteOrd i, FiniteOrd s, Eq o) => WpMethod -> aut s i o -> Int
- Haal.Experiment: Statistics :: Int -> [[i]] -> [aut s i o] -> Statistics (aut :: Type -> Type -> Type -> Type) s i o
+ Haal.Experiment: Statistics :: Int -> [[i]] -> [aut s i o] -> Statistics aut s i o
- Haal.Experiment: [statsCexs] :: Statistics (aut :: Type -> Type -> Type -> Type) s i o -> [[i]]
+ Haal.Experiment: [statsCexs] :: Statistics aut s i o -> [[i]]
- Haal.Experiment: [statsHyps] :: Statistics (aut :: Type -> Type -> Type -> Type) s i o -> [aut s i o]
+ Haal.Experiment: [statsHyps] :: Statistics aut s i o -> [aut s i o]
- Haal.Experiment: [statsRounds] :: Statistics (aut :: Type -> Type -> Type -> Type) s i o -> Int
+ Haal.Experiment: [statsRounds] :: Statistics aut s i o -> Int
- Haal.Experiment: class Learner (l :: Type -> Type -> Type) (aut :: Type -> Type -> Type -> Type) s | l -> aut s
+ Haal.Experiment: class Learner l aut s | l -> aut s
- Haal.Experiment: data Statistics (aut :: Type -> Type -> Type -> Type) s i o
+ Haal.Experiment: data Statistics aut s i o
- Haal.Experiment: execute :: (SUL sul m i o, Automaton aut s i o, Ord i, Eq o) => sul i o -> aut s i o -> [[i]] -> m ([i], [o])
+ Haal.Experiment: execute :: (SUL sul m, Automaton aut s, Ord i, Eq o) => sul i o -> aut s i o -> [[i]] -> m ([i], [o])
- Haal.Experiment: experiment :: forall sul (m :: Type -> Type) i o aut s learner oracle. (SUL sul m i o, Automaton aut s i o, Learner learner aut s, EquivalenceOracle oracle, FiniteOrd i, FiniteOrd s, FiniteEq o) => learner i o -> oracle -> ExperimentT (sul i o) m (aut s i o, Statistics aut s i o)
+ Haal.Experiment: experiment :: (SUL sul m, Automaton aut s, Learner learner aut s, EquivalenceOracle oracle, FiniteOrd i, FiniteOrd s, FiniteEq o) => learner i o -> oracle -> ExperimentT (sul i o) m (aut s i o, Statistics aut s i o)
- Haal.Experiment: findCex :: forall sul (m :: Type -> Type) i o aut s or. (SUL sul m i o, Automaton aut s i o, EquivalenceOracle or, FiniteOrd i, FiniteOrd s, Eq o) => or -> aut s i o -> ExperimentT (sul i o) m (or, ([i], [o]))
+ Haal.Experiment: findCex :: (SUL sul m, Automaton aut s, EquivalenceOracle or, FiniteOrd i, FiniteOrd s, Eq o) => or -> aut s i o -> ExperimentT (sul i o) m (or, ([i], [o]))
- Haal.Experiment: initialize :: forall sul (m :: Type -> Type) i o. (Learner l aut s, SUL sul m i o, FiniteOrd i, Finite o) => l i o -> ExperimentT (sul i o) m (l i o)
+ Haal.Experiment: initialize :: (Learner l aut s, SUL sul m, FiniteOrd i, Finite o) => l i o -> ExperimentT (sul i o) m (l i o)
- Haal.Experiment: learn :: forall sul (m :: Type -> Type) i o. (Learner l aut s, SUL sul m i o, Automaton aut s i o, FiniteOrd i, FiniteOrd s, FiniteEq o) => l i o -> ExperimentT (sul i o) m (l i o, aut s i o)
+ Haal.Experiment: learn :: (Learner l aut s, SUL sul m, Automaton aut s, FiniteOrd i, FiniteOrd s, FiniteEq o) => l i o -> ExperimentT (sul i o) m (l i o, aut s i o)
- Haal.Experiment: pairwiseWalk :: (SUL sul m i o, Automaton aut s i o, Ord i, Eq o) => sul i o -> aut s i o -> [i] -> m Bool
+ Haal.Experiment: pairwiseWalk :: (SUL sul m, Automaton aut s, Ord i, Eq o) => sul i o -> aut s i o -> [i] -> m Bool
- Haal.Experiment: refine :: forall sul (m :: Type -> Type) i o. (Learner l aut s, SUL sul m i o, FiniteOrd i, Finite o) => l i o -> [i] -> ExperimentT (sul i o) m (l i o)
+ Haal.Experiment: refine :: (Learner l aut s, SUL sul m, FiniteOrd i, Finite o) => l i o -> [i] -> ExperimentT (sul i o) m (l i o)
- Haal.Experiment: testSuite :: (EquivalenceOracle or, Automaton aut s i o, FiniteOrd i, FiniteOrd s, Eq o) => or -> aut s i o -> (or, [[i]])
+ Haal.Experiment: testSuite :: (EquivalenceOracle or, Automaton aut s, FiniteOrd i, FiniteOrd s, Eq o) => or -> aut s i o -> (or, [[i]])
- Haal.Experiment: type ExperimentT sul (m :: Type -> Type) result = ReaderT sul m result
+ Haal.Experiment: type ExperimentT sul m result = ReaderT sul m result
- Haal.Learning.LMstar: lmstar :: forall sul i o (m :: Type -> Type). (SUL sul m i o, FiniteOrd i, Eq o, Monad m) => LMstar i o -> ExperimentT (sul i o) m (LMstar i o, MealyAutomaton StateID i o)
+ Haal.Learning.LMstar: lmstar :: forall sul i o m. (SUL sul m, FiniteOrd i, Eq o, Monad m) => LMstar i o -> ExperimentT (sul i o) m (LMstar i o, MealyAutomaton StateID i o)
Files
- CHANGELOG.md +10/−0
- examples/div.hs +1/−1
- examples/io.hs +1/−1
- examples/website.hs +13/−10
- haal.cabal +2/−2
- src/Haal/Automaton/MealyAutomaton.hs +2/−2
- src/Haal/Automaton/MooreAutomaton.hs +2/−2
- src/Haal/BlackBox.hs +12/−12
- src/Haal/EquivalenceOracle/WMethod.hs +3/−3
- src/Haal/EquivalenceOracle/WpMethod.hs +3/−3
- src/Haal/Experiment.hs +13/−13
- src/Haal/Learning/LMstar.hs +7/−7
CHANGELOG.md view
@@ -8,6 +8,16 @@ ## Unreleased +## 0.3.0.0 - 2026-03-11++### Changed+- `SUL` typeclass no longer takes `i` and `o` as class parameters; they are now+ universally quantified in the method signatures. Instances should drop `i o`+ from their instance heads: `instance SUL MyType IO` instead of+ `instance SUL MyType IO Input Output`.+- `Automaton` typeclass likewise drops `i` and `o` from its class head.+ All constraint occurrences `(Automaton aut s i o)` become `(Automaton aut s)`.+ ## 0.2.0.0 - 2026-03-05 ### Added
examples/div.hs view
@@ -50,7 +50,7 @@ , buffer :: [i] } -instance SUL Program Identity i o where+instance SUL Program Identity where step s i = return (theStep s i) reset = return . theReset
examples/io.hs view
@@ -51,7 +51,7 @@ , buffer :: [i] } -instance SUL Program IO Binary Bool where+instance SUL Program IO where step = theStep reset = theReset
examples/website.hs view
@@ -24,11 +24,13 @@ | NotFoundTag deriving (Eq, Show, Ord, Enum, Bounded) -data WebsiteSUL inp out = WebsiteSUL+data WebsiteSUL i o = WebsiteSUL { baseUrl :: String , currentUrl :: String -- current path, e.g. "/about"+ , toPath :: i -> String+ , fromHtml :: String -> o+ , notFound :: o }- deriving (Eq, Show) -- Fetch + HTML processing --------------------------------------------------------------------------------@@ -65,20 +67,18 @@ -- SUL instance -------------------------------------------------------------------------------- -instance SUL WebsiteSUL IO Page PageTag where- reset sul = do- pure sul{currentUrl = "/"}+instance SUL WebsiteSUL IO where+ reset sul = pure sul{currentUrl = "/"} step sul input = do if currentUrl sul /= "/garbage" then do- let suffix = inputMap input+ let suffix = toPath sul input html <- fetch (baseUrl sul ++ suffix)- let out = outputMap html+ let out = fromHtml sul html sul' = sul{currentUrl = suffix} pure (sul', out)- else do- pure (sul, NotFoundTag)+ else pure (sul, notFound sul) -------------------------------------------------------------------------------- -- Experiment setup@@ -101,8 +101,11 @@ _currentUrl = "/" let website = WebsiteSUL- { baseUrl = _baseUrl -- this is constant+ { baseUrl = _baseUrl , currentUrl = _currentUrl+ , toPath = inputMap+ , fromHtml = outputMap+ , notFound = NotFoundTag } :: WebsiteSUL Page PageTag (model, _) <- runExperimentT exper website
haal.cabal view
@@ -1,11 +1,11 @@ cabal-version: 2.2 --- This file has been generated from package.yaml by hpack version 0.37.0.+-- This file has been generated from package.yaml by hpack version 0.38.1. -- -- see: https://github.com/sol/hpack name: haal-version: 0.2.0.0+version: 0.3.0.0 synopsis: A Haskell library for Active Automata Learning. description: Please see the README on GitHub at <https://github.com/steve-anunknown/haal#readme> category: Model Learning
src/Haal/Automaton/MealyAutomaton.hs view
@@ -73,7 +73,7 @@ mealyReset :: MealyAutomaton s i o -> MealyAutomaton s i o mealyReset m = m{mealyCurrentS = mealyInitialS m} -instance SUL (MealyAutomaton s) Identity i o where+instance SUL (MealyAutomaton s) Identity where step sul i = return (mealyStep sul i) reset = return . mealyReset @@ -92,7 +92,7 @@ domainS = Set.toList $ mealyStates m domainI = Set.toList $ inputs m -instance Automaton MealyAutomaton s i o where+instance Automaton MealyAutomaton s where transitions = mealyTransitions states = mealyStates current = mealyCurrentS
src/Haal/Automaton/MooreAutomaton.hs view
@@ -49,7 +49,7 @@ mooreReset :: MooreAutomaton s i o -> MooreAutomaton s i o mooreReset m = m{mooreCurrentS = mooreInitialS m} -instance SUL (MooreAutomaton s) Identity i o where+instance SUL (MooreAutomaton s) Identity where step sul i = return (mooreStep sul i) reset = return . mooreReset @@ -68,7 +68,7 @@ domainS = Set.toList $ mooreStates m domainI = Set.toList $ inputs m -instance Automaton MooreAutomaton s i o where+instance Automaton MooreAutomaton s where transitions = mooreTransitions current = mooreCurrentS states = mooreStates
src/Haal/BlackBox.hs view
@@ -44,7 +44,7 @@ It also requires a monad m, that may be 'Identity' in case of a pure SUL, or 'IO' in case of an external program that performs IO. -}-class (Monad m) => SUL sul m i o where+class (Monad m) => SUL sul m where step :: sul i o -> i -> m (sul i o, o) reset :: sul i o -> m (sul i o) @@ -56,7 +56,7 @@ type FiniteOrd i = (Ord i, Finite i) -- | Generalization of 'step' that operates on a list of inputs.-walk :: (SUL sul m i o) => sul i o -> [i] -> m (sul i o, [o])+walk :: (SUL sul m) => sul i o -> [i] -> m (sul i o, [o]) walk sul [] = pure (sul, []) walk sul (x : xs) = do (sul', o) <- step sul x@@ -75,7 +75,7 @@ support for automata operations. Automatons are models, not programs, so they are pure and operate in the Identity monad. -}-class (SUL (aut s) Identity i o) => Automaton aut s i o where+class (SUL (aut s) Identity) => Automaton aut s where transitions :: (FiniteOrd i, FiniteOrd s) => aut s i o ->@@ -85,23 +85,23 @@ update :: aut s i o -> s -> aut s i o -- | Pure instance of 'step'.-stepPure :: (SUL sul Identity i o) => sul i o -> i -> (sul i o, o)+stepPure :: (SUL sul Identity) => sul i o -> i -> (sul i o, o) stepPure sul i = runIdentity (step sul i) -- | Pure instance of 'walk'.-walkPure :: (SUL sul Identity i o) => sul i o -> [i] -> (sul i o, [o])+walkPure :: (SUL sul Identity) => sul i o -> [i] -> (sul i o, [o]) walkPure sul i = runIdentity (walk sul i) -- | Pure instance of 'reset'.-resetPure :: (SUL sul Identity i o) => sul i o -> sul i o+resetPure :: (SUL sul Identity) => sul i o -> sul i o resetPure sul = runIdentity (reset sul) -- | Return the initial state of an automaton.-initial :: (Automaton aut s i o) => aut s i o -> s+initial :: (Automaton aut s) => aut s i o -> s initial = current . resetPure -- | Return the set of reachable states of an automaton.-reachable :: forall s i o aut. (Automaton aut s i o, Ord s, FiniteOrd i) => aut s i o -> Set.Set s+reachable :: forall s i o aut. (Automaton aut s, Ord s, FiniteOrd i) => aut s i o -> Set.Set s reachable aut = bfs [initial aut] $ Set.singleton (initial aut) where alphabet = inputs aut@@ -118,7 +118,7 @@ -- | Returns a map containing the shortest sequence to access each reachable state from the initial state. accessSequences :: forall s i o aut.- (Automaton aut s i o, FiniteOrd i, Ord s) =>+ (Automaton aut s, FiniteOrd i, Ord s) => aut s i o -> Map.Map s [i] accessSequences aut = bfs [(initialSt, [])] (Set.singleton initialSt) (Map.singleton initialSt [])@@ -147,7 +147,7 @@ the given automaton. -} distinguish ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , Ord s , Eq o@@ -186,7 +186,7 @@ - any other state of the automaton. -} localCharacterizingSet ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -202,7 +202,7 @@ of the automaton. -} globalCharacterizingSet ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o
src/Haal/EquivalenceOracle/WMethod.hs view
@@ -39,7 +39,7 @@ -- | The 'wmethodSuiteSize' function computes the size of the test suite for the W-method. wmethodSuiteSize ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -57,7 +57,7 @@ -- | The 'wmethodSuite' function generates the test suite for the W-method and a new oracle. wmethodSuite ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -103,7 +103,7 @@ -- | The 'randomWMethodSuite' function generates the test suite for the random W-method and a new oracle. randomWMethodSuite :: forall i o s aut.- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o
src/Haal/EquivalenceOracle/WpMethod.hs view
@@ -36,7 +36,7 @@ -- | The 'wpmethodSuiteSize' returns the number of test cases in the test suite of WpMethod. wpmethodSuiteSize ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -82,7 +82,7 @@ -- | Returns the test suite for the WpMethod. wpmethodSuite :: forall aut i o s.- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -156,7 +156,7 @@ -- | Return the 'RandomWpMethod' test suite. randomWpMethodSuite :: forall aut i o s.- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o
src/Haal/Experiment.hs view
@@ -35,7 +35,7 @@ -} class EquivalenceOracle or where testSuite ::- ( Automaton aut s i o+ ( Automaton aut s , FiniteOrd i , FiniteOrd s , Eq o@@ -51,14 +51,14 @@ -} class Learner l aut s | l -> aut s where initialize ::- ( SUL sul m i o+ ( SUL sul m , FiniteOrd i , Finite o ) => l i o -> ExperimentT (sul i o) m (l i o) refine ::- ( SUL sul m i o+ ( SUL sul m , FiniteOrd i , Finite o ) =>@@ -66,8 +66,8 @@ [i] -> ExperimentT (sul i o) m (l i o) learn ::- ( SUL sul m i o- , Automaton aut s i o+ ( SUL sul m+ , Automaton aut s , FiniteOrd i , FiniteOrd s , FiniteEq o@@ -120,8 +120,8 @@ and then requires a system under learning (SUL) to run the experiment. -} experiment ::- ( SUL sul m i o- , Automaton aut s i o+ ( SUL sul m+ , Automaton aut s , Learner learner aut s , EquivalenceOracle oracle , FiniteOrd i@@ -149,8 +149,8 @@ -- | The 'execute' function executes the test suite of an oracle, given a SUL and an automaton. execute ::- ( SUL sul m i o- , Automaton aut s i o+ ( SUL sul m+ , Automaton aut s , Ord i , Eq o ) =>@@ -171,8 +171,8 @@ simultaneously, checking if the outputs are the same. -} pairwiseWalk ::- ( SUL sul m i o- , Automaton aut s i o+ ( SUL sul m+ , Automaton aut s , Ord i , Eq o ) =>@@ -191,8 +191,8 @@ and SUL. -} findCex ::- ( SUL sul m i o- , Automaton aut s i o+ ( SUL sul m+ , Automaton aut s , EquivalenceOracle or , FiniteOrd i , FiniteOrd s
src/Haal/Learning/LMstar.hs view
@@ -59,7 +59,7 @@ -} initializeOT :: forall i o sul m.- (FiniteOrd i, SUL sul m i o) =>+ (FiniteOrd i, SUL sul m) => ExperimentT (sul i o) m (ObservationTable i o) initializeOT = do sul <- ask@@ -106,7 +106,7 @@ -- | The 'lmstar' function implements one iteration of the LM* algorithm. lmstar :: forall sul i o m.- (SUL sul m i o, FiniteOrd i, Eq o, Monad m) =>+ (SUL sul m, FiniteOrd i, Eq o, Monad m) => LMstar i o -> ExperimentT (sul i o) m (LMstar i o, MealyAutomaton StateID i o) lmstar (LMstar ot) = case otIsClosed ot of@@ -158,7 +158,7 @@ -- | The 'otRefineAngluin' function refines the observation table based on a counterexample, according to Angluin's algorithm. otRefineAngluin :: forall sul i o m.- (FiniteOrd i, SUL sul m i o) =>+ (FiniteOrd i, SUL sul m) => ObservationTable i o -> [i] -> ExperimentT (sul i o) m (ObservationTable i o)@@ -223,7 +223,7 @@ -- | The 'makeConsistent' function makes the observation table consistent by adding missing prefixes. makeConsistent :: forall i o sul m.- (FiniteOrd i, SUL sul m i o) =>+ (FiniteOrd i, SUL sul m) => ObservationTable i o -> ([i], [i]) -> ExperimentT (sul i o) m (ObservationTable i o)@@ -257,7 +257,7 @@ -- | The 'makeClosed' function makes the observation table closed by adding missing suffixes. makeClosed :: forall sul i o m.- (FiniteOrd i, SUL sul m i o) =>+ (FiniteOrd i, SUL sul m) => ObservationTable i o -> [i] -> ExperimentT (sul i o) m (ObservationTable i o)@@ -297,7 +297,7 @@ -} otRefinePlus :: forall sul i o m.- (FiniteOrd i, SUL sul m i o) =>+ (FiniteOrd i, SUL sul m) => ObservationTable i o -> [i] -> ExperimentT (sul i o) m (ObservationTable i o)@@ -323,7 +323,7 @@ return (ObservationTable{prefixSetS = sm, suffixSetE = em', mappingT = tm', prefixSetSI = sm_I}) updateMap ::- (Ord i, SUL sul m i o, Monad m) =>+ (Ord i, SUL sul m, Monad m) => Map.Map ([i], [i]) o -> Set.Set ([i], [i]) -> sul i o ->