nomyx-language-1.0.0: src/Nomyx/Language/Variables.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
-- | All the building blocks to allow rules to build variables.
-- for example, you can create a variable with:
--do
-- newVar_ "MyMoney" (0::Int)
module Nomyx.Language.Variables (
V(..),
newVar, newVar_, newVar',
readVar, readVar_,
writeVar,
modifyVar,
delVar,
getTempVar,
VarName,
) where
import Nomyx.Language.Types
import Imprevu (V, VarName, getTempVar)
import qualified Imprevu as Imp
import Data.Typeable
-- * Variables
-- | variable creation
newVar :: (Typeable a, Show a) => VarName -> a -> Nomex (Maybe (V a))
newVar = Imp.newVar
newVar_ :: (Typeable a, Show a) => VarName -> a -> Nomex (V a)
newVar_ = Imp.newVar_
newVar' :: (Typeable a, Show a) => V a -> a -> Nomex Bool
newVar' = Imp.newVar'
-- | variable reading
readVar :: (Typeable a, Show a) => V a -> Nomex (Maybe a)
readVar = Imp.readVar
readVar_ :: (Typeable a, Show a) => V a -> Nomex a
readVar_ = Imp.readVar_
-- | variable writing
writeVar :: (Typeable a, Show a) => V a -> a -> Nomex Bool
writeVar = Imp.writeVar
-- | modify a variable using the provided function
modifyVar :: (Typeable a, Show a) => V a -> (a -> a) -> Nomex Bool
modifyVar = Imp.modifyVar
-- | delete variable
delVar :: V a -> Nomex Bool
delVar = Imp.delVar