Nomyx-Language-0.3.2: Language to express rules for Nomic

Safe HaskellNone

Language.Nomyx.Definition

Contents

Description

All the building blocks to build rules.

Synopsis

Variables

newVar :: (Typeable a, Show a, Eq a) => VarName -> a -> Nomex (Maybe (V a))Source

variable creation

newVar_ :: (Typeable a, Show a, Eq a) => VarName -> a -> Nomex (V a)Source

readVar :: (Typeable a, Show a, Eq a) => V a -> Nomex (Maybe a)Source

variable reading

readVar_ :: forall a. (Typeable a, Show a, Eq a) => V a -> Nomex aSource

writeVar :: (Typeable a, Show a, Eq a) => V a -> a -> Nomex BoolSource

variable writing

writeVar_ :: (Typeable a, Show a, Eq a) => V a -> a -> Nomex ()Source

modifyVar :: (Typeable a, Show a, Eq a) => V a -> (a -> a) -> Nomex ()Source

modify a variable using the provided function

delVar :: V a -> Nomex BoolSource

delete variable

delVar_ :: V a -> Nomex ()Source

Message Variable

data VEvent a Source

a MsgVar is a variable with a message attached, allowing to trigger registered functions anytime the var if modified

Constructors

VUpdated a 
VDeleted 

Instances

Typeable1 VEvent 
Eq a => Eq (VEvent a) 
Show a => Show (VEvent a) 

data MsgVar a Source

Constructors

MsgVar (Msg (VEvent a)) (V a) 

newMsgVar :: (Typeable a, Show a, Eq a) => VarName -> a -> Nomex (Maybe (MsgVar a))Source

newMsgVar_ :: (Typeable a, Show a, Eq a) => VarName -> a -> Nomex (MsgVar a)Source

newMsgVar' :: (Typeable a, Show a, Eq a) => VarName -> a -> (VEvent a -> Nomex ()) -> Nomex (Maybe (MsgVar a))Source

writeMsgVar :: (Typeable a, Show a, Eq a) => MsgVar a -> a -> Nomex BoolSource

writeMsgVar_ :: (Typeable a, Show a, Eq a) => MsgVar a -> a -> Nomex ()Source

readMsgVar :: (Typeable a, Show a, Eq a) => MsgVar a -> Nomex (Maybe a)Source

readMsgVar_ :: (Typeable a, Show a, Eq a) => MsgVar a -> Nomex aSource

modifyMsgVar :: (Typeable a, Show a, Eq a) => MsgVar a -> (a -> a) -> Nomex ()Source

onMsgVarChange :: (Typeable a, Show a, Eq a) => MsgVar a -> (VEvent a -> Nomex ()) -> Nomex ()Source

onMsgVarEvent :: (Typeable a, Show a, Eq a) => MsgVar a -> (a -> Nomex b) -> (a -> b -> Nomex ()) -> (b -> Nomex ()) -> Nomex ()Source

getMsgVarMessage :: (Typeable a, Show a, Eq a) => MsgVar a -> Nomex (Msg (VEvent a))Source

get the messsage triggered when the array is filled

getMsgVarData :: (Typeable a, Show a, Eq a) => MsgVar a -> Nomex (Maybe a)Source

get the association array

Variable arrays

type ArrayVar i a = MsgVar [(i, Maybe a)]Source

ArrayVar is an indexed array with a signal attached triggered at every change. | each indexed elements starts empty (value=Nothing).

newArrayVar :: (Typeable a, Show a, Eq a, Typeable i, Show i, Eq i) => VarName -> [i] -> Nomex (Maybe (ArrayVar i a))Source

initialize an empty ArrayVar

newArrayVar_ :: (Typeable a, Show a, Eq a, Typeable i, Show i, Eq i) => VarName -> [i] -> Nomex (ArrayVar i a)Source

newArrayVar' :: (Typeable a, Show a, Eq a, Typeable i, Show i, Eq i) => VarName -> [i] -> (VEvent [(i, Maybe a)] -> Nomex ()) -> Nomex (Maybe (ArrayVar i a))Source

initialize an empty ArrayVar, registering a callback that will be triggered at every change

newArrayVarOnce :: (Ord i, Typeable a, Show a, Eq a, Typeable i, Show i) => VarName -> [i] -> (VEvent [(i, Maybe a)] -> Nomex ()) -> Nomex (Maybe (ArrayVar i a))Source

initialize an empty ArrayVar, registering a callback. the ArrayVar will be deleted when full

cleanOnFull :: (Typeable a, Show a, Eq a, Ord i, Typeable i, Show i) => ArrayVar i a -> Nomex ()Source

putArrayVar :: (Ord i, Typeable a, Show a, Eq a, Typeable i, Show i) => ArrayVar i a -> i -> a -> Nomex BoolSource

store one value and the given index. If this is the last filled element, the registered callbacks are triggered.

putArrayVar_ :: (Ord i, Typeable a, Show a, Eq a, Typeable i, Show i) => ArrayVar i a -> i -> a -> Nomex ()Source

Events

onEvent :: (Typeable e, Show e, Eq e) => Event e -> ((EventNumber, EventData e) -> Nomex ()) -> Nomex EventNumberSource

register a callback on an event

onEvent_ :: forall e. (Typeable e, Show e, Eq e) => Event e -> (EventData e -> Nomex ()) -> Nomex ()Source

register a callback on an event, disregard the event number

onEventOnce :: (Typeable e, Show e, Eq e) => Event e -> (EventData e -> Nomex ()) -> Nomex EventNumberSource

set an handler for an event that will be triggered only once

onEventOnce_ :: (Typeable e, Show e, Eq e) => Event e -> (EventData e -> Nomex ()) -> Nomex ()Source

set an handler for an event that will be triggered only once

delAllEvents :: (Typeable e, Show e, Eq e) => Event e -> Nomex ()Source

sendMessage :: (Typeable a, Show a, Eq a) => Msg a -> a -> Nomex ()Source

broadcast a message that can be catched by another rule

onMessage :: (Typeable m, Show m) => Msg m -> (MsgData m -> Nomex ()) -> Nomex ()Source

subscribe on a message

onMessageOnce :: (Typeable m, Show m) => Msg m -> (MsgData m -> Nomex ()) -> Nomex ()Source

schedule :: Schedule Freq -> (UTCTime -> Nomex ()) -> Nomex ()Source

on the provided schedule, the supplied function will be called

schedule' :: [UTCTime] -> (UTCTime -> Nomex ()) -> Nomex ()Source

Rule management

activateRule :: RuleNumber -> Nomex BoolSource

activate a rule: change its state to Active and execute it

rejectRule :: RuleNumber -> Nomex BoolSource

reject a rule: change its state to Suppressed and suppresses all its environment (events, variables, inputs) the rule can be activated again later

addRule :: Rule -> Nomex BoolSource

add a rule to the game, it will have to be activated

Inputs

Radio inputs

inputRadio :: (Eq c, Show c, Typeable c) => PlayerNumber -> String -> [c] -> c -> Event (Input c)Source

inputRadioEnum :: forall c. (Enum c, Bounded c, Typeable c, Eq c, Show c) => PlayerNumber -> String -> c -> Event (Input c)Source

onInputRadio :: (Typeable a, Eq a, Show a) => String -> [a] -> (EventNumber -> a -> Nomex ()) -> PlayerNumber -> Nomex EventNumberSource

triggers a choice input to the user. The result will be sent to the callback

onInputRadio_ :: (Typeable a, Eq a, Show a) => String -> [a] -> (a -> Nomex ()) -> PlayerNumber -> Nomex ()Source

the same, disregard the event number

onInputRadioOnce :: (Typeable a, Eq a, Show a) => String -> [a] -> (a -> Nomex ()) -> PlayerNumber -> Nomex EventNumberSource

the same, suppress the event after first trigger

onInputRadioOnce_ :: (Typeable a, Eq a, Show a) => String -> [a] -> (a -> Nomex ()) -> PlayerNumber -> Nomex ()Source

the same, disregard the event number

onInputRadioEnum :: forall a. (Enum a, Bounded a, Typeable a, Eq a, Show a) => String -> a -> (EventNumber -> a -> Nomex ()) -> PlayerNumber -> Nomex EventNumberSource

triggers a choice input to the user, using an enumerate as input

onInputRadioEnum_ :: forall a. (Enum a, Bounded a, Typeable a, Eq a, Show a) => String -> a -> (a -> Nomex ()) -> PlayerNumber -> Nomex ()Source

the same, disregard the event number

onInputRadioEnumOnce_ :: forall a. (Enum a, Bounded a, Typeable a, Eq a, Show a) => String -> a -> (a -> Nomex ()) -> PlayerNumber -> Nomex ()Source

the same, suppress the event after first trigger

Text inputs

onInputText :: String -> (EventNumber -> String -> Nomex ()) -> PlayerNumber -> Nomex EventNumberSource

triggers a string input to the user. The result will be sent to the callback

onInputText_ :: String -> (String -> Nomex ()) -> PlayerNumber -> Nomex ()Source

asks the player pn to answer a question, and feed the callback with this data.

onInputTextOnce_ :: String -> (String -> Nomex ()) -> PlayerNumber -> Nomex ()Source

asks the player pn to answer a question, and feed the callback with this data.

Checkbox inputs

onInputCheckbox_ :: (Typeable a, Eq a, Show a) => String -> [(a, String)] -> ([a] -> Nomex ()) -> PlayerNumber -> Nomex ()Source

Button inputs

Textarea inputs

Players

getPlayers :: Nomex [PlayerInfo]Source

get all the players

getPlayer :: PlayerNumber -> Nomex (Maybe PlayerInfo)Source

Get a specific player

getPlayerName :: PlayerNumber -> Nomex (Maybe PlayerName)Source

Set the name of a player

setPlayerName :: PlayerNumber -> PlayerName -> Nomex BoolSource

Set the name of a player

getPlayersNumber :: Nomex IntSource

Get the total number of playersgetPlayersNumber :: Nomex Int

getAllPlayerNumbers :: Nomex [PlayerNumber]Source

Get all the players number

delPlayer :: PlayerNumber -> Nomex BoolSource

Remove the player from the game (kick)

Outputs

newOutput :: String -> PlayerNumber -> Nomex OutputNumberSource

outputs a message to one player

displayVar :: (Typeable a, Show a, Eq a) => PlayerNumber -> MsgVar a -> (a -> String) -> Nomex ()Source

showArrayVar :: (Show a, Show i) => String -> [(i, a)] -> StringSource

Victory, time and self-number

setVictory :: [PlayerNumber] -> Nomex ()Source

set victory to a list of players

giveVictory :: PlayerNumber -> Nomex ()Source

give victory to one player

getSelfRuleNumber :: Nomex RuleNumberSource

allows a rule to retrieve its own number (for auto-deleting for example)

Miscellaneous

defaultRule :: RuleSource

a default rule