alga-0.2.2: Algorithmic automation for various DAWs

Safe HaskellNone
LanguageHaskell2010

Alga.Language.Environment

Synopsis

Documentation

data AlgaEnv m a Source #

Monad that implements ALGA environment.

Instances

Monad m => Monad (AlgaEnv m) Source # 

Methods

(>>=) :: AlgaEnv m a -> (a -> AlgaEnv m b) -> AlgaEnv m b #

(>>) :: AlgaEnv m a -> AlgaEnv m b -> AlgaEnv m b #

return :: a -> AlgaEnv m a #

fail :: String -> AlgaEnv m a #

Functor m => Functor (AlgaEnv m) Source # 

Methods

fmap :: (a -> b) -> AlgaEnv m a -> AlgaEnv m b #

(<$) :: a -> AlgaEnv m b -> AlgaEnv m a #

Monad m => Applicative (AlgaEnv m) Source # 

Methods

pure :: a -> AlgaEnv m a #

(<*>) :: AlgaEnv m (a -> b) -> AlgaEnv m a -> AlgaEnv m b #

(*>) :: AlgaEnv m a -> AlgaEnv m b -> AlgaEnv m b #

(<*) :: AlgaEnv m a -> AlgaEnv m b -> AlgaEnv m a #

MonadIO m => MonadIO (AlgaEnv m) Source # 

Methods

liftIO :: IO a -> AlgaEnv m a #

MonadThrow m => MonadThrow (AlgaEnv m) Source # 

Methods

throwM :: Exception e => e -> AlgaEnv m a #

MonadCatch m => MonadCatch (AlgaEnv m) Source # 

Methods

catch :: Exception e => AlgaEnv m a -> (e -> AlgaEnv m a) -> AlgaEnv m a #

MonadMask m => MonadMask (AlgaEnv m) Source # 

Methods

mask :: ((forall a. AlgaEnv m a -> AlgaEnv m a) -> AlgaEnv m b) -> AlgaEnv m b #

uninterruptibleMask :: ((forall a. AlgaEnv m a -> AlgaEnv m a) -> AlgaEnv m b) -> AlgaEnv m b #

MonadException m => MonadException (AlgaEnv m) Source # 

Methods

controlIO :: (RunIO (AlgaEnv m) -> IO (AlgaEnv m a)) -> AlgaEnv m a #

Monad m => HasEnv (AlgaEnv m) Source # 

class Monad m => HasEnv m where Source #

Type class for things that can be considered ALGA environment.

Minimal complete definition

getDefs, setDefs, setRandGen, newRandGen

Methods

getDefs :: m Defs Source #

Get collection of all definitions.

setDefs :: Defs -> m () Source #

Update definitions with given ones.

setRandGen :: Natural -> m () Source #

Set random generator seed.

newRandGen :: m TFGen Source #

Split current random generator, update it, and return new one.

Instances

Monad m => HasEnv (AlgaEnv m) Source # 
HasEnv m => HasEnv (StateT e m) Source # 

Methods

getDefs :: StateT e m Defs Source #

setDefs :: Defs -> StateT e m () Source #

setRandGen :: Natural -> StateT e m () Source #

newRandGen :: StateT e m TFGen Source #

HasEnv m => HasEnv (ReaderT * e m) Source # 

Methods

getDefs :: ReaderT * e m Defs Source #

setDefs :: Defs -> ReaderT * e m () Source #

setRandGen :: Natural -> ReaderT * e m () Source #

newRandGen :: ReaderT * e m TFGen Source #

runAlgaEnv :: Monad m => AlgaEnv m a -> m a Source #

Run state monad with ALGA environment.

addDef Source #

Arguments

:: HasEnv m 
=> String

Reference name

-> SyntaxTree

AST of its principle

-> m () 

Add a new definition to the environment.

remDef Source #

Arguments

:: HasEnv m 
=> String

Reference name

-> m () 

Remove definition given its name.

clearDefs :: HasEnv m => m () Source #

Remove all definitions, restoring default state of environment.

getPrin Source #

Arguments

:: HasEnv m 
=> String

Reference name

-> m SyntaxTree

Syntax tree

Get principle corresponding to given variable name.

getSrc Source #

Arguments

:: HasEnv m 
=> String

Reference name

-> m Text

Textual representation of source code

Get source code of definition given its name.

fullSrc :: HasEnv m => m Text Source #

Reconstruct source code for all existing definitions.

getRefs :: HasEnv m => m [String] Source #

Get all reference names defined at the moment.

purgeEnv Source #

Arguments

:: HasEnv m 
=> [String]

Top-level definitions

-> m () 

Purge environment removing definitions that are not used in construction of “top-level” definitions.

checkRecur Source #

Arguments

:: HasEnv m 
=> String

Reference name

-> SyntaxTree

Its syntax tree

-> m Bool 

Check if definition with given name is depends on itself.