mcsp-algorithms-0.1.0: Algorithms for Minimum Common String Partition (MCSP) in Haskell.
Safe HaskellSafe-Inferred
LanguageGHC2021

MCSP.Data.Meta

Description

Additional variables and parameters.

Synopsis

Collection of variables

data VariableMap Source #

A polymorphic storage of MetaVariables.

Instances

Instances details
Show VariableMap Source # 
Instance details

Defined in MCSP.Data.Meta

lookup :: Typeable v => VariableMap -> Maybe v Source #

Return Just the value a meta-variable of the given type, or Nothing if no such variable is available.

>>> import Prelude (Int)
>>> instance MetaOutputVariable Int
>>> lookup @Int empty
Nothing
>>> let (_, vars) = runMeta (setVar (12 :: Int))
>>> lookup @Int vars
Just 12

Data Class

class Typeable v => MetaInputVariable v where Source #

Represents a additional variable that can be used as input of a computation.

These variables are set and resolved dynamically inside the Meta monad.

Methods

getVar :: Meta v Source #

Extracts the input variable, possibly modifying the environment.

class Typeable v => MetaOutputVariable v where Source #

Represents a additional variable that can be set as output of a computation.

These variables are set and resolved dynamically inside the Meta monad.

Minimal complete definition

Nothing

Methods

setVar :: v -> Meta () Source #

Updates the output variable, possibly modifying the environment.

Instances

Instances details
MetaOutputVariable PSOFirstBestIter Source # 
Instance details

Defined in MCSP.Heuristics.PSOBased

Monadic operations

data Meta a Source #

A monad that represents operation with meta-variables.

The meta-variables may be used as input, output or both.

Instances

Instances details
Applicative Meta Source # 
Instance details

Defined in MCSP.Data.Meta

Methods

pure :: a -> Meta a #

(<*>) :: Meta (a -> b) -> Meta a -> Meta b #

liftA2 :: (a -> b -> c) -> Meta a -> Meta b -> Meta c #

(*>) :: Meta a -> Meta b -> Meta b #

(<*) :: Meta a -> Meta b -> Meta a #

Functor Meta Source # 
Instance details

Defined in MCSP.Data.Meta

Methods

fmap :: (a -> b) -> Meta a -> Meta b #

(<$) :: a -> Meta b -> Meta a #

Monad Meta Source # 
Instance details

Defined in MCSP.Data.Meta

Methods

(>>=) :: Meta a -> (a -> Meta b) -> Meta b #

(>>) :: Meta a -> Meta b -> Meta b #

return :: a -> Meta a #

getOrDefine :: MetaInputVariable v => v -> Meta v Source #

Get the value of an input meta-variable or set a default one.

>>> import Prelude (String)
>>> instance MetaInputVariable String where getVar = getOrDefine ""
>>> runMeta (getOrDefine "default")
("default",VariableMap [[Char]])
>>> runMeta (getOrDefine "default" <:: "pre-set")
("pre-set",VariableMap [[Char]])

setOutputVar :: MetaOutputVariable v => v -> Meta () Source #

Set the value of meta-variable for the given type, without any additional side-effect.

>>> import Prelude (Int)
>>> instance MetaOutputVariable Int where
>>> setVar = setOutputVar
>>> runMeta (setOutputVar @Int 12)
((),VariableMap [Int])

inspect :: MetaOutputVariable v => Meta (Maybe v) Source #

Get a meta-variable for the expected type.

>>> import Prelude (Int)
>>> instance MetaOutputVariable Int
>>> runMeta (inspect @Int)
(Nothing,VariableMap [])
>>> runMeta (setVar (12 :: Int) >> inspect @Int)
(Just 12,VariableMap [Int])

(<::) :: MetaInputVariable v => Meta a -> v -> Meta a Source #

Set an input meta-variable for the given type.

>>> import Prelude (Int)
>>> instance MetaInputVariable Int where getVar = getOrDefine 0
>>> runMeta (getVar @Int <:: (12 :: Int))
(12,VariableMap [Int])

Execution

evalMeta :: Meta a -> a Source #

Execute a Meta monad and return the output.

runMeta :: Meta a -> (a, VariableMap) Source #

Execute a Meta monad and return the output and the final variables.