{-# LANGUAGE TupleSections #-}

module Language.EFLINT.Parse where

import Language.EFLINT.Spec

import GLL.Combinators hiding (many, some, IntLit, BoolLit, StringLit)
import Text.Regex.Applicative hiding ((<**>), optional)

import Data.Char (isLower)
import qualified Data.Map as M

flint_lexer :: String -> Either String [Token]
flint_lexer :: String -> Either String [Token]
flint_lexer = LexerSettings -> String -> Either String [Token]
forall t.
SubsumesToken t =>
LexerSettings -> String -> Either String [t]
lexerEither LexerSettings
lexer_settings

lexer_settings :: LexerSettings
lexer_settings :: LexerSettings
lexer_settings = LexerSettings
emptyLanguage {
    identifiers :: RE Char String
identifiers = RE Char String
types
  , keywords :: [String]
keywords =  [String
"!?",String
"||", String
"&&", String
"<=", String
">=", String
"..", String
"True", String
"False", String
"Sum", String
"==", String
"!=", String
"When", String
"Where",String
"Holds when",  String
"Holds", String
"Present when", String
"Present", String
"Max", String
"Min", String
"Count", String
"Union", String
"Enabled", String
"Violated when", String
"Violated"
                , String
"Atom", String
"String", String
"Int", String
"Time", String
"Current Time"
                , String
"Exists", String
"Forall", String
"Foreach", String
"Force"
                , String
"Extend", String
"Event", String
"Act", String
"Fact", String
"Invariant", String
"Predicate", String
"Duty", String
"Actor", String
"Holder", String
"Claimant", String
"Recipient", String
"Related to", String
"Conditioned by", String
"Creates", String
"Terminates", String
"Obfuscates", String
"Terminated by", String
"With" , String
"Identified by", String
"Derived from", String
"Derived externally", String
"Enforced by", String
"Syncs with"
                , String
"Do", String
"Placeholder", String
"For", String
"Not", String
"Open", String
"Closed" 
                , String
"#", String
"##", String
"###", String
"####"
                , String
"#include", String
"#require"
                ]
  , keychars :: String
keychars = [Char
'[', Char
']', Char
'(', Char
')', Char
'!', Char
',', Char
'\'', Char
'+', Char
'-', Char
'*', Char
'/', Char
'.', Char
'=', Char
'>', Char
'<', Char
':', Char
'?', Char
'{', Char
'}', Char
'%', Char
'~']
  } 
  where types :: RE Char String
types = ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([String] -> [String]) -> [String] -> String)
-> (String -> [String] -> [String]) -> String -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) (String -> [String] -> String)
-> RE Char String -> RE Char ([String] -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>  
                RE Char String
word RE Char ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> RE Char String -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' '))) RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String
word) RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> 
                (\String
id -> String
"[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"]") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'[' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
']' RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
                (\String
id -> String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'<' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String
act_or_duty RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'>'
          where word :: RE Char String
word = (\Char
c [String]
ss -> Char
cChar -> String -> String
forall a. a -> [a] -> [a]
:[String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
ss) (Char -> [String] -> String)
-> RE Char Char -> RE Char ([String] -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower RE Char ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> RE Char String
hyphen RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'_'))
                  where hyphen :: RE Char String
hyphen = (\Char
c1 Char
c2 -> [Char
c1,Char
c2]) (Char -> Char -> String)
-> RE Char Char -> RE Char (Char -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'-' RE Char (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower 
                act_or_duty :: RE Char String
act_or_duty = (\String
id -> String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'<' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'>'
                              RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (:) (Char -> String -> String)
-> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (Bool -> Bool
not (Bool -> Bool) -> (Char -> Bool) -> Char -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> String -> Bool) -> String -> Char -> Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem String
"< =") RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal 
                internal :: RE Char Char
internal = (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (\Char
c -> Bool -> Bool
not (Char
c Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
"]>+="))

value_expr :: BNF Token Term
value_expr :: BNF Token Term
value_expr = String
"value-expr"
  String -> OO [] AltExpr Token Term -> BNF Token Term
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<::=  Bool -> Term
BoolLit Bool
True Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"True"
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Bool -> Term
BoolLit Bool
False Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"False"
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
When (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Or (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"||" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
And (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"&&" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr

  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Eq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"==" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Neq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!=" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr

  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Leq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"<="  AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Geq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
">="  AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Le  (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'<'  AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Ge  (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'>' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Sub (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Add (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Mult (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Mod  (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'%' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term -> Term
Div (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'/' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Not (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Not (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Not" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr 

  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Sum" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Sum
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Count" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Count 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Max" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Max
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Min" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Min

  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Int -> Term
IntLit (Int -> Term) -> SymbExpr Token Int -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  String -> Term
StringLit (String -> Term) -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
atom 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Var -> Term
Ref (Var -> Term) -> SymbExpr Token Var -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var 
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  (String -> Arguments -> Term) -> BNF Token Term
forall a. (String -> Arguments -> a) -> BNF Token a
application String -> Arguments -> Term
App
  BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Var -> Term
Project (Term -> Var -> Term)
-> BNF Token Term -> AltExpr Token (Var -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Var -> Term)
-> SymbExpr Token Char -> AltExpr Token (Var -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.' AltExpr Token (Var -> Term)
-> OO [] AltExpr Token Var -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var
var SymbExpr Token Var -> SymbExpr Token Var -> OO [] AltExpr Token Var
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Var -> SymbExpr Token Var
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens SymbExpr Token Var
var)
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> String -> Term
Tag (Term -> String -> Term)
-> BNF Token Term -> AltExpr Token (String -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (String -> Term)
-> SymbExpr Token Char -> AltExpr Token (String -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (String -> Term)
-> SymbExpr Token String -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit 

  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  AltExpr Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> Term
Exists ([Var] -> Term -> Term)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Exists" AltExpr Token ([Var] -> Term -> Term)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr)
  BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  AltExpr Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> Term
Forall ([Var] -> Term -> Term)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Forall" AltExpr Token ([Var] -> Term -> Term)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr)
  BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Present (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Present (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Violated (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Violated" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term -> Term
Enabled (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Enabled" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
  AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  BNF Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens BNF Token Term
value_expr
  BNF Token Term -> AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Term
CurrentTime Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Current Time"

keyword_when :: BNF Token String
keyword_when :: SymbExpr Token String
keyword_when = String
"when-or-where" String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Where" SymbExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When"

var :: BNF Token Var
var :: SymbExpr Token Var
var = String
"decorated-type-lit"
  String -> AltExpr Token Var -> SymbExpr Token Var
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> String -> Var
Var (String -> String -> Var)
-> SymbExpr Token String -> AltExpr Token (String -> Var)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (String -> Var)
-> SymbExpr Token String -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
decoration

atom :: BNF Token String
atom :: SymbExpr Token String
atom = String
"atom" String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit SymbExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
alt_id_lit

decoration :: BNF Token String 
decoration :: SymbExpr Token String
decoration = String
"decoration"
  String -> AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Maybe Int -> String -> String
forall a. Show a => Maybe a -> String -> String
make_f (Maybe Int -> String -> String)
-> SymbExpr Token (Maybe Int) -> AltExpr Token (String -> String)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int -> SymbExpr Token (Maybe Int)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit AltExpr Token (String -> String)
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Char -> SymbExpr Token String
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'\'')
  where make_f :: Maybe a -> String -> String
make_f Maybe a
mi String
str = String -> (a -> String) -> Maybe a -> String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
"" a -> String
forall a. Show a => a -> String
show Maybe a
mi String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str

arguments :: BNF Token Arguments 
arguments :: BNF Token Arguments
arguments = String
"arguments"
  String -> BNF Token Arguments -> BNF Token Arguments
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Arguments -> BNF Token Arguments
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ( [Modifier] -> Arguments
forall a b. b -> Either a b
Right ([Modifier] -> Arguments)
-> SymbExpr Token [Modifier] -> AltExpr Token Arguments
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Modifier
-> SymbExpr Token Char -> SymbExpr Token [Modifier]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy SymbExpr Token Modifier
modifier (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
           AltExpr Token Arguments
-> AltExpr Token Arguments -> OO [] AltExpr Token Arguments
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Term] -> Arguments
forall a b. a -> Either a b
Left ([Term] -> Arguments)
-> SymbExpr Token [Term] -> AltExpr Token Arguments
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') )

modifier :: BNF Token Modifier
modifier :: SymbExpr Token Modifier
modifier = String
"modifier"
  String -> AltExpr Token Modifier -> SymbExpr Token Modifier
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Var -> Term -> Modifier
Rename (Var -> Term -> Modifier)
-> SymbExpr Token Var -> AltExpr Token (Term -> Modifier)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var AltExpr Token (Term -> Modifier)
-> SymbExpr Token Char -> AltExpr Token (Term -> Modifier)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'=' AltExpr Token (Term -> Modifier)
-> BNF Token Term -> AltExpr Token Modifier
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr 

type_expr :: BNF Token Domain
type_expr :: BNF Token Domain
type_expr = String
"type-expr"
  String -> OO [] AltExpr Token Domain -> BNF Token Domain
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<::=  [Var] -> Domain
Products ([Var] -> Domain) -> (Var -> [Var]) -> Var -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[]) (Var -> Domain) -> SymbExpr Token Var -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var 
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [String] -> Domain
Strings ([String] -> Domain)
-> SymbExpr Token [String] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
-> OO [] AltExpr Token Char -> SymbExpr Token [String]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token String
atom (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' SymbExpr Token Char
-> SymbExpr Token Char -> OO [] AltExpr Token Char
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [Int] -> Domain
Ints ([Int] -> Domain) -> SymbExpr Token [Int] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
-> OO [] AltExpr Token Char -> SymbExpr Token [Int]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' SymbExpr Token Char
-> SymbExpr Token Char -> OO [] AltExpr Token Char
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [Var] -> Domain
Products ([Var] -> Domain) -> SymbExpr Token [Var] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*')
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  AltExpr Token Domain -> BNF Token Domain
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Domain
Products ([Var] -> Domain) -> SymbExpr Token [Var] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*'))
  BNF Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [Int] -> Domain
Ints ([Int] -> Domain) -> (Int -> [Int]) -> Int -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:[]) (Int -> Domain) -> SymbExpr Token Int -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Int -> Int -> Domain
ints_from_domain (Int -> Int -> Domain)
-> SymbExpr Token Int -> AltExpr Token (Int -> Domain)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit AltExpr Token (Int -> Domain)
-> SymbExpr Token String -> AltExpr Token (Int -> Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
".." AltExpr Token (Int -> Domain)
-> SymbExpr Token Int -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [String] -> Domain
Strings ([String] -> Domain) -> (String -> [String]) -> String -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> Domain) -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
atom 
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Char -> Char -> Domain
strings_from_domain (Char -> Char -> Domain)
-> SymbExpr Token Char -> AltExpr Token (Char -> Domain)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Char
forall t. SubsumesToken t => SymbExpr t Char
char_lit AltExpr Token (Char -> Domain)
-> SymbExpr Token String -> AltExpr Token (Char -> Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
".." AltExpr Token (Char -> Domain)
-> SymbExpr Token Char -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Char
forall t. SubsumesToken t => SymbExpr t Char
char_lit
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Domain
AnyString Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"String"
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Domain
AnyString Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Atom"
  AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Domain
AnyInt Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Int"
  AltExpr Token Domain
-> AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  Domain
Time Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Time"
  where ints_from_domain :: Int -> Int -> Domain 
        ints_from_domain :: Int -> Int -> Domain
ints_from_domain Int
min Int
max = [Int] -> Domain
Ints ([Int] -> Domain) -> [Int] -> Domain
forall a b. (a -> b) -> a -> b
$ [Int
min..Int
max]

        strings_from_domain :: Char -> Char -> Domain
        strings_from_domain :: Char -> Char -> Domain
strings_from_domain Char
min Char
max = [String] -> Domain
Strings ([String] -> Domain) -> [String] -> Domain
forall a b. (a -> b) -> a -> b
$ (Char -> String) -> String -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Char -> String -> String
forall a. a -> [a] -> [a]
:[]) [Char
min..Char
max]


-- parsing frame specifications
parse_component :: BNF Token a -> String -> Either String a
parse_component :: BNF Token a -> String -> Either String a
parse_component BNF Token a
p String
str = case String -> Either String [Token]
flint_lexer String
str of
  Left String
err  -> String -> Either String a
forall a b. a -> Either a b
Left String
err
  Right [Token]
ts  -> case CombinatorOptions -> BNF Token a -> [Token] -> Either String [a]
forall t (s :: * -> * -> *) a.
(Show t, Parseable t, IsSymbExpr s) =>
CombinatorOptions -> s t a -> [t] -> Either String [a]
parseWithOptionsAndError [Int -> CombinatorOption
maximumErrors Int
1] BNF Token a
p [Token]
ts of
   Left String
err -> String -> Either String a
forall a b. a -> Either a b
Left String
err
   Right [a]
as -> a -> Either String a
forall a b. b -> Either a b
Right ([a] -> a
forall a. [a] -> a
head [a]
as)

flint :: BNF Token (Spec, Refiner, Initialiser, Scenario)
flint :: BNF Token (Spec, Refiner, Initialiser, Scenario)
flint = String
"flint" String
-> AltExpr Token (Spec, Refiner, Initialiser, Scenario)
-> BNF Token (Spec, Refiner, Initialiser, Scenario)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Decl]
-> Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario)
forall b c d. [Decl] -> b -> c -> d -> (Spec, b, c, d)
cons ([Decl]
 -> Refiner
 -> Initialiser
 -> Scenario
 -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token (Maybe String)
-> AltExpr
     Token
     ([Decl]
      -> Refiner
      -> Initialiser
      -> Scenario
      -> (Spec, Refiner, Initialiser, Scenario))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ 
  SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#") AltExpr
  Token
  ([Decl]
   -> Refiner
   -> Initialiser
   -> Scenario
   -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token [Decl]
-> AltExpr
     Token
     (Refiner
      -> Initialiser
      -> Scenario
      -> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [Decl]
declarations AltExpr
  Token
  (Refiner
   -> Initialiser
   -> Scenario
   -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Refiner
-> AltExpr
     Token
     (Initialiser -> Scenario -> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  AltExpr Token Refiner -> Refiner -> SymbExpr Token Refiner
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"##" SymbExpr Token String
-> SymbExpr Token Refiner -> AltExpr Token Refiner
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Refiner
refiner) Refiner
forall k a. Map k a
M.empty AltExpr
  Token
  (Initialiser -> Scenario -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Initialiser
-> AltExpr
     Token (Scenario -> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"###" SymbExpr Token String
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Initialiser
initialiser) [] AltExpr Token (Scenario -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Scenario
-> AltExpr Token (Spec, Refiner, Initialiser, Scenario)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  AltExpr Token Scenario -> Scenario -> SymbExpr Token Scenario
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"####" SymbExpr Token String
-> SymbExpr Token Scenario -> AltExpr Token Scenario
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Scenario
scenario) []
  where cons :: [Decl] -> b -> c -> d -> (Spec, b, c, d)
cons [Decl]
ds b
r c
i d
s = ([Decl] -> Spec -> Spec
extend_spec [Decl]
ds Spec
emptySpec, b
r, c
i, d
s)

parse_flint :: String -> Either String (Spec, Refiner, Initialiser, Scenario)
parse_flint = BNF Token (Spec, Refiner, Initialiser, Scenario)
-> String -> Either String (Spec, Refiner, Initialiser, Scenario)
forall a. BNF Token a -> String -> Either String a
parse_component BNF Token (Spec, Refiner, Initialiser, Scenario)
flint

declarations :: BNF Token [Decl]
declarations :: SymbExpr Token [Decl]
declarations = String
"declarations" String -> SymbExpr Token [Decl] -> SymbExpr Token [Decl]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Decl -> SymbExpr Token [Decl]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple1 SymbExpr Token Decl
frame 

placeholder :: BNF Token Decl
placeholder :: SymbExpr Token Decl
placeholder = String
"placeholder-decl" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> String -> Decl
PlaceholderDecl (String -> String -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> String -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Placeholder" AltExpr Token (String -> String -> Decl)
-> SymbExpr Token String -> AltExpr Token (String -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (String -> Decl)
-> SymbExpr Token String -> AltExpr Token (String -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"For" AltExpr Token (String -> Decl)
-> SymbExpr Token String -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit

frame :: BNF Token Decl
frame :: SymbExpr Token Decl
frame = String
"frame" String -> OO [] AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Decl
fact 
                OO [] AltExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
duty 
                SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
act 
                SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
event 
                SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_ext
                SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
placeholder 
  where fact :: OO [] AltExpr Token Decl
fact = (Bool -> String -> Domain -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_fact_decl (Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
False Bool
False)
          SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (Bool -> String -> Domain -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_actor_decl (Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
False Bool
True)
          SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (String -> Term -> Decl) -> SymbExpr Token Decl
forall a. (String -> Term -> a) -> BNF Token a
syn_pred_decl (Bool -> String -> Term -> Decl
make_pred Bool
False) 
          SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (String -> Term -> Decl) -> SymbExpr Token Decl
forall a. (String -> Term -> a) -> BNF Token a
syn_inv_decl String -> Term -> Decl
make_inv 
          where make_fact :: Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
inv Bool
is_actor Bool
is_closed String
ty Domain
dom Term
dom_filter [ModClause]
clauses = 
                 String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
                 where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec  { kind :: Kind
kind = FactSpec -> Kind
Fact (Bool -> Bool -> FactSpec
FactSpec Bool
inv Bool
is_actor)
                                         , domain :: Domain
domain = Domain
dom
                                         , domain_constraint :: Term
domain_constraint = Term
dom_filter
                                         , derivation :: [Derivation]
derivation = []
                                         , closed :: Bool
closed = Bool
is_closed
                                         , conditions :: [Term]
conditions = [] }
                make_pred :: Bool -> String -> Term -> Decl
make_pred Bool
inv String
ty Term
t = Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
inv Bool
False Bool
True String
ty ([Var] -> Domain
Products []) (Bool -> Term
BoolLit Bool
True) [[Derivation] -> ModClause
DerivationCl [Term -> Derivation
HoldsWhen Term
t]]
                make_inv :: String -> Term -> Decl
make_inv String
ty Term
t = Bool -> String -> Term -> Decl
make_pred Bool
True String
ty Term
t

        act :: SymbExpr Token Decl
act = (Bool
 -> String
 -> Maybe Var
 -> Maybe Var
 -> [Var]
 -> Term
 -> [ModClause]
 -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool
 -> String
 -> Maybe Var
 -> Maybe Var
 -> [Var]
 -> Term
 -> [ModClause]
 -> a)
-> BNF Token a
syn_act_decl Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> Decl
make_act
          where make_act :: Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> Decl
make_act Bool
is_closed String
ty Maybe Var
mact Maybe Var
mrec [Var]
attrs Term
dom_filter [ModClause]
clauses = 
                  String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
                 where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
                        kind :: Kind
kind = ActSpec -> Kind
Act (ActSpec :: Initialiser -> [Sync] -> ActSpec
ActSpec {effects :: Initialiser
effects = [], syncs :: [Sync]
syncs = []} ),
                        domain :: Domain
domain = [Var] -> Domain
Products (Var
actorVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:([Var] -> (Var -> [Var]) -> Maybe Var -> [Var]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[]) Maybe Var
mrec [Var] -> [Var] -> [Var]
forall a. [a] -> [a] -> [a]
++ [Var]
attrs)), 
                        domain_constraint :: Term
domain_constraint = Term
dom_filter,
                        derivation :: [Derivation]
derivation = [],
                        closed :: Bool
closed = Bool
is_closed, 
                        conditions :: [Term]
conditions = [] }
                       actor :: Var
actor = Var -> (Var -> Var) -> Maybe Var -> Var
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Var
no_decoration String
"actor") Var -> Var
forall a. a -> a
id Maybe Var
mact

        event :: SymbExpr Token Decl
event = (Bool -> String -> [Var] -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_event_decl Bool -> String -> [Var] -> Term -> [ModClause] -> Decl
make_event 
          where make_event :: Bool -> String -> [Var] -> Term -> [ModClause] -> Decl
make_event Bool
is_closed String
ty [Var]
attrs Term
dom_filter [ModClause]
clauses =
                 String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
                 where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
                          kind :: Kind
kind = EventSpec -> Kind
Event (EventSpec :: Initialiser -> EventSpec
EventSpec { event_effects :: Initialiser
event_effects = [] })
                        , domain :: Domain
domain = [Var] -> Domain
Products [Var]
attrs
                        , domain_constraint :: Term
domain_constraint = Term
dom_filter
                        , derivation :: [Derivation]
derivation = []
                        , closed :: Bool
closed = Bool
is_closed
                        , conditions :: [Term]
conditions = []
                        } 
 
        duty :: SymbExpr Token Decl
duty = (Bool
 -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_duty_decl Bool
-> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl
make_duty 
          where make_duty :: Bool
-> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl
make_duty Bool
is_closed String
ty Var
hold Var
claim [Var]
attrs Term
dom_filter [ModClause]
clauses = 
                  String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec 
                 where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
                        domain :: Domain
domain = [Var] -> Domain
Products (Var
holdVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:Var
claimVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[Var]
attrs),
                        domain_constraint :: Term
domain_constraint = Term
dom_filter,
                        kind :: Kind
kind = DutySpec -> Kind
Duty (DutySpec :: [String] -> [Term] -> DutySpec
DutySpec { violated_when :: [Term]
violated_when = [], enforcing_acts :: [String]
enforcing_acts = []}), 
                        derivation :: [Derivation]
derivation = [], 
                        closed :: Bool
closed = Bool
is_closed, 
                        conditions :: [Term]
conditions = []}

syn_fact_decl :: (Bool -> DomId -> Domain -> Term -> [ModClause] -> a) -> BNF Token a
syn_fact_decl :: (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_fact_decl Bool -> String -> Domain -> Term -> [ModClause] -> a
cons = String
"fact-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> Domain -> Term -> [ModClause] -> a
cons (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
  SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Domain -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Domain -> Term -> [ModClause] -> a)
-> BNF Token Domain -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  AltExpr Token Domain -> Domain -> BNF Token Domain
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Identified by" SymbExpr Token String -> BNF Token Domain -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Domain
type_expr) Domain
AnyString AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [ModClause]
syn_fact_clauses

syn_ext :: BNF Token Decl
syn_ext :: SymbExpr Token Decl
syn_ext = String
"type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> 
  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Extend" SymbExpr Token String
-> OO [] AltExpr Token Decl -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> (    SymbExpr Token Decl
syn_fact_ext 
                       SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_act_ext 
                       SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_duty_ext 
                       SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_event_ext )

syn_is_closed :: BNF Token Bool
syn_is_closed :: SymbExpr Token Bool
syn_is_closed = String
"is-type-closed-modifier" String -> SymbExpr Token Bool -> SymbExpr Token Bool
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Bool -> Bool -> SymbExpr Token Bool
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef OO [] AltExpr Token Bool
alts Bool
True
  where alts :: OO [] AltExpr Token Bool
alts =     Bool
True Bool -> SymbExpr Token String -> AltExpr Token Bool
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Closed"
              AltExpr Token Bool
-> AltExpr Token Bool -> OO [] AltExpr Token Bool
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Bool
False Bool -> SymbExpr Token String -> AltExpr Token Bool
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Open"

syn_fact_ext :: BNF Token Decl
syn_fact_ext :: SymbExpr Token Decl
syn_fact_ext = String
"fact-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_fact_clauses 

syn_actor_decl :: (Bool -> DomId -> Domain -> Term -> [ModClause] -> a) -> BNF Token a
syn_actor_decl :: (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_actor_decl Bool -> String -> Domain -> Term -> [ModClause] -> a
cons = String
"actor-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons' (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
  SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Actor" AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  AltExpr Token [Var] -> [Var] -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With" SymbExpr Token String
-> SymbExpr Token [Var] -> AltExpr Token [Var]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
manySepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*')) [] AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [ModClause]
syn_fact_clauses 
  where cons' :: Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons' Bool
isc String
d [Var]
vars Term
t = Bool -> String -> Domain -> Term -> [ModClause] -> a
cons Bool
isc String
d ([Var] -> Domain
Products (String -> String -> Var
Var String
actor_ref_address String
"" Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
: [Var]
vars)) Term
t 

syn_pred_decl :: (DomId -> Term -> a) -> BNF Token a
syn_pred_decl :: (String -> Term -> a) -> BNF Token a
syn_pred_decl String -> Term -> a
cons = String
"pred-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Term -> a
cons (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (String -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ 
  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Predicate" AltExpr Token (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr

syn_inv_decl :: (DomId -> Term -> a) -> BNF Token a
syn_inv_decl :: (String -> Term -> a) -> BNF Token a
syn_inv_decl String -> Term -> a
cons = String
"inv-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Term -> a
cons (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (String -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$
  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Invariant" AltExpr Token (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr  

syn_domain_constraint :: BNF Token Term
syn_domain_constraint = AltExpr Token Term -> Term -> BNF Token Term
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (SymbExpr Token String
keyword_when SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term
value_expr) (Bool -> Term
BoolLit Bool
True)

syn_duty_decl :: (Bool -> DomId -> Var -> Var -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_duty_decl :: (Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_duty_decl Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a
cons = String
"duty-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a
cons (Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr
     Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
  SymbExpr Token Bool
syn_is_closed AltExpr
  Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
     Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Duty" AltExpr
  Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<**
  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holder" AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Var
-> AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var
var AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<**
  String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Claimant" AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Var
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var
var AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  SymbExpr Token [ModClause]
syn_duty_clauses 

syn_act_decl :: (Bool -> DomId -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_act_decl :: (Bool
 -> String
 -> Maybe Var
 -> Maybe Var
 -> [Var]
 -> Term
 -> [ModClause]
 -> a)
-> BNF Token a
syn_act_decl Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a
cons = String
"act-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a
cons (Bool
 -> String
 -> Maybe Var
 -> Maybe Var
 -> [Var]
 -> Term
 -> [ModClause]
 -> a)
-> SymbExpr Token Bool
-> AltExpr
     Token
     (String
      -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
  SymbExpr Token Bool
syn_is_closed AltExpr
  Token
  (String
   -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
     Token
     (String
      -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Act" AltExpr
  Token
  (String
   -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
     Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr
  Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr
     Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr
  Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe Var)
-> AltExpr Token (Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
  AltExpr Token Var -> SymbExpr Token (Maybe Var)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Actor" SymbExpr Token String -> SymbExpr Token Var -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var
var) AltExpr Token (Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe Var)
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  AltExpr Token Var -> SymbExpr Token (Maybe Var)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Recipient" SymbExpr Token String -> SymbExpr Token Var -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var
var) AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [ModClause]
syn_event_clauses 

syn_act_ext :: BNF Token Decl
syn_act_ext :: SymbExpr Token Decl
syn_act_ext = String
"act-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Act" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_event_clauses 

syn_event_ext :: BNF Token Decl
syn_event_ext :: SymbExpr Token Decl
syn_event_ext = String
"event-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Event" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_event_clauses 

syn_duty_ext :: BNF Token Decl
syn_duty_ext :: SymbExpr Token Decl
syn_duty_ext = String
"duty-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Duty" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_duty_clauses 

syn_event_decl :: (Bool -> DomId -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_event_decl :: (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_event_decl Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons = String
"event-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
  SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Event" AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>  
  SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> 
  SymbExpr Token [ModClause]
syn_event_clauses

syn_fact_clauses :: BNF Token [ModClause]
syn_fact_clauses :: SymbExpr Token [ModClause]
syn_fact_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_fact_clause
 where syn_fact_clause :: SymbExpr Token ModClause
syn_fact_clause = String
"fact-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
                                       AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
  
syn_event_clauses :: BNF Token [ModClause]
syn_event_clauses :: SymbExpr Token [ModClause]
syn_event_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_event_clause
  where syn_event_clause :: SymbExpr Token ModClause
syn_event_clause = String
"event-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
                                          AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
                                          AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
creating_post'
                                          AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
terminating_post'
                                          AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
obfuscating_post'
                                          AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Sync] -> ModClause
SyncCl ([Sync] -> ModClause)
-> SymbExpr Token [Sync] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Sync]
synchronisations

syn_duty_clauses :: BNF Token [ModClause]
syn_duty_clauses :: SymbExpr Token [ModClause]
syn_duty_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_duty_clause
  where syn_duty_clause :: SymbExpr Token ModClause
syn_duty_clause = String
"duty-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
                                        AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
                                        AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Term] -> ModClause
ViolationCl ([Term] -> ModClause)
-> SymbExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Term]
violation_condition 
                                        AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [String] -> ModClause
EnforcingActsCl ([String] -> ModClause)
-> SymbExpr Token [String] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [String]
enforcing_acts_clauses 

objects :: BNF Token [Var]
objects :: SymbExpr Token [Var]
objects = String
"related-to" String -> SymbExpr Token [Var] -> SymbExpr Token [Var]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Var] -> [Var] -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Related to" SymbExpr Token String
-> SymbExpr Token [Var] -> AltExpr Token [Var]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) []

enforcing_acts_clauses :: BNF Token [DomId]
enforcing_acts_clauses :: SymbExpr Token [String]
enforcing_acts_clauses = String
"enforcing-act-clauses"
  String -> AltExpr Token [String] -> SymbExpr Token [String]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Enforced by" SymbExpr Token String
-> SymbExpr Token [String] -> AltExpr Token [String]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token String
-> SymbExpr Token Char -> SymbExpr Token [String]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')

violation_condition :: BNF Token [Term]
violation_condition :: SymbExpr Token [Term]
violation_condition = String
"violation-conditions"
  String -> AltExpr Token [Term] -> SymbExpr Token [Term]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Violated when" SymbExpr Token String
-> SymbExpr Token [Term] -> AltExpr Token [Term]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')

precondition :: BNF Token [Term]
precondition :: SymbExpr Token [Term]
precondition = String
"preconditions" String -> SymbExpr Token [Term] -> SymbExpr Token [Term]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> 
  AltExpr Token [Term] -> [Term] -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token [Term]
precondition' []
precondition' :: AltExpr Token [Term]
precondition' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Conditioned by" SymbExpr Token String
-> SymbExpr Token [Term] -> AltExpr Token [Term]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') 

creating_post :: BNF Token [Effect]
creating_post :: SymbExpr Token Initialiser
creating_post = String
"creating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> 
  AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
creating_post' [] 
creating_post' :: AltExpr Token Initialiser
creating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Creates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
CAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))

terminating_post :: BNF Token [Effect]
terminating_post :: SymbExpr Token Initialiser
terminating_post = String
"terminating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
  AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
terminating_post' []
terminating_post' :: AltExpr Token Initialiser
terminating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Terminates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
TAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))

obfuscating_post :: BNF Token [Effect]
obfuscating_post :: SymbExpr Token Initialiser
obfuscating_post = String
"obfuscating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
  AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
obfuscating_post' []
obfuscating_post' :: AltExpr Token Initialiser
obfuscating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Obfuscates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
OAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))


postconditions :: BNF Token [Effect]
postconditions :: SymbExpr Token Initialiser
postconditions = String
"postconditions" 
  String
-> OO [] AltExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Initialiser -> Initialiser -> Initialiser
forall a. [a] -> [a] -> [a]
(++) (Initialiser -> Initialiser -> Initialiser)
-> SymbExpr Token Initialiser
-> AltExpr Token (Initialiser -> Initialiser)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Initialiser
creating_post AltExpr Token (Initialiser -> Initialiser)
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Initialiser
terminating_post 
  AltExpr Token Initialiser
-> AltExpr Token Initialiser -> OO [] AltExpr Token Initialiser
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> Initialiser -> Initialiser
forall a. [a] -> [a] -> [a]
(++) (Initialiser -> Initialiser -> Initialiser)
-> SymbExpr Token Initialiser
-> AltExpr Token (Initialiser -> Initialiser)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Initialiser
terminating_post AltExpr Token (Initialiser -> Initialiser)
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Initialiser
creating_post

effect :: BNF Token ([Var], Term) 
effect :: SymbExpr Token ([Var], Term)
effect = String
"effect-foreach" 
  String
-> OO [] AltExpr Token ([Var], Term)
-> SymbExpr Token ([Var], Term)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> ([],) (Term -> ([Var], Term))
-> BNF Token Term -> AltExpr Token ([Var], Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr 
  AltExpr Token ([Var], Term)
-> SymbExpr Token ([Var], Term)
-> OO [] AltExpr Token ([Var], Term)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> ([Var], Term)) -> SymbExpr Token ([Var], Term)
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach (,)

synchronisations :: BNF Token [Sync]
synchronisations :: SymbExpr Token [Sync]
synchronisations = String
"synchronisations"
  String -> AltExpr Token [Sync] -> SymbExpr Token [Sync]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Syncs with" SymbExpr Token String
-> SymbExpr Token [Sync] -> AltExpr Token [Sync]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Sync -> SymbExpr Token Char -> SymbExpr Token [Sync]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 (([Var] -> Term -> Sync) -> SymbExpr Token Sync
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Sync
Sync) (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')

application :: (DomId -> Arguments -> a) -> BNF Token a
application :: (String -> Arguments -> a) -> BNF Token a
application String -> Arguments -> a
cons = String
"application" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Arguments -> a
cons (String -> Arguments -> a)
-> SymbExpr Token String -> AltExpr Token (Arguments -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Arguments -> a)
-> BNF Token Arguments -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Arguments
arguments

foreach :: ([Var] -> Term -> a) -> BNF Token a
foreach :: ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> a
cons = String
"foreach"
  String -> BNF Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token a -> BNF Token a
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> a
cons ([Var] -> Term -> a)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr Token ([Var] -> Term -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') 
                         AltExpr Token (Term -> a)
-> SymbExpr Token Char -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr )

opt_foreach :: ([Var] -> Term -> a) -> BNF Token a
opt_foreach :: ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> a
cons = String
"optional-foreach"
  String -> OO [] AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Var] -> Term -> a
cons [] (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr 
  AltExpr Token a -> BNF Token a -> OO [] AltExpr Token a
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> a) -> BNF Token a
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> a
cons

derivation_from :: BNF Token [Derivation]
derivation_from :: SymbExpr Token [Derivation]
derivation_from = String
"derivation" 
  String
-> OO [] AltExpr Token [Derivation] -> SymbExpr Token [Derivation]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Derived from" SymbExpr Token String
-> SymbExpr Token [Derivation] -> AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Derivation
-> SymbExpr Token Char -> SymbExpr Token [Derivation]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Derivation
term_deriv (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
  AltExpr Token [Derivation]
-> AltExpr Token [Derivation] -> OO [] AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (Term -> Derivation) -> [Term] -> [Derivation]
forall a b. (a -> b) -> [a] -> [b]
map Term -> Derivation
HoldsWhen ([Term] -> [Derivation])
-> SymbExpr Token String -> AltExpr Token ([Term] -> [Derivation])
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token String
keyword_present_when AltExpr Token ([Term] -> [Derivation])
-> SymbExpr Token [Term] -> AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
  where term_deriv :: SymbExpr Token Derivation
term_deriv = String
"term-derivation" String
-> OO [] AltExpr Token Derivation -> SymbExpr Token Derivation
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Var] -> Term -> Derivation
Dv [] (Term -> Derivation) -> BNF Token Term -> AltExpr Token Derivation
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token Derivation
-> SymbExpr Token Derivation -> OO [] AltExpr Token Derivation
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> Derivation) -> SymbExpr Token Derivation
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Derivation
Dv 

keyword_present_when :: BNF Token String
keyword_present_when :: SymbExpr Token String
keyword_present_when = String
"present-when"
  String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present" AltExpr Token String
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When" 
  AltExpr Token String
-> OO [] AltExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds" AltExpr Token String
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When" 
  AltExpr Token String
-> OO [] AltExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present when"
  AltExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds when"

-- parsing refiner specifications
parse_refiner :: String -> Either String Refiner
parse_refiner :: String -> Either String Refiner
parse_refiner =  SymbExpr Token Refiner -> String -> Either String Refiner
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Refiner
refiner

refiner :: BNF Token Refiner
refiner :: SymbExpr Token Refiner
refiner = String
"refinement" String -> AltExpr Token Refiner -> SymbExpr Token Refiner
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [(String, Domain)] -> Refiner
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(String, Domain)] -> Refiner)
-> SymbExpr Token [(String, Domain)] -> AltExpr Token Refiner
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (String, Domain)
-> SymbExpr Token [(String, Domain)]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token (String, Domain)
refine

refine :: BNF Token (DomId, Domain)
refine :: SymbExpr Token (String, Domain)
refine = String
"refine" String
-> AltExpr Token (String, Domain)
-> SymbExpr Token (String, Domain)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (,) (String -> Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (String -> Domain -> (String, Domain))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (Domain -> (String, Domain))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (Domain -> (String, Domain))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Identified by" AltExpr Token (Domain -> (String, Domain))
-> BNF Token Domain -> AltExpr Token (String, Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Domain
type_expr

-- parsing initial state specifications
parse_initialiser :: String -> Either String Initialiser
parse_initialiser :: String -> Either String Initialiser
parse_initialiser = SymbExpr Token Initialiser -> String -> Either String Initialiser
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Initialiser
initialiser 

initialiser :: BNF Token Initialiser
initialiser :: SymbExpr Token Initialiser
initialiser = String
"initial state" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token Effect -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (SymbExpr Token Effect
initial SymbExpr Token Effect
-> SymbExpr Token Char -> AltExpr Token Effect
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.') 
  where initial :: SymbExpr Token Effect
initial = String
"initial-statement" 
          String -> OO [] AltExpr Token Effect -> SymbExpr Token Effect
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>  ([Var] -> Term -> Effect) -> SymbExpr Token Effect
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Effect
CAll
          SymbExpr Token Effect
-> AltExpr Token Effect -> OO [] AltExpr Token Effect
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||>  [Var] -> Term -> Effect
CAll [] (Term -> Effect) -> BNF Token Term -> AltExpr Token Effect
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr

-- parsing scenario specifications
parse_scenario :: String -> Either String Scenario
parse_scenario :: String -> Either String Scenario
parse_scenario = SymbExpr Token Scenario -> String -> Either String Scenario
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Scenario
scenario
 
scenario :: BNF Token Scenario
scenario :: SymbExpr Token Scenario
scenario = String
"scenario" String -> SymbExpr Token Scenario -> SymbExpr Token Scenario
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Statement -> SymbExpr Token Scenario
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token Statement
statement


parse_statement :: String -> Either String Statement
parse_statement :: String -> Either String Statement
parse_statement = SymbExpr Token Statement -> String -> Either String Statement
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Statement
statement

statement :: BNF Token Statement
statement :: SymbExpr Token Statement
statement = String
"statement"
  String -> OO [] AltExpr Token Statement -> SymbExpr Token Statement
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (([Var], String, Arguments) -> Statement)
-> ([Var], String, Arguments) -> Statement
forall a b. (a -> b) -> a -> b
($) ((([Var], String, Arguments) -> Statement)
 -> ([Var], String, Arguments) -> Statement)
-> SymbExpr Token (([Var], String, Arguments) -> Statement)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (([Var], String, Arguments) -> Statement)
actioner AltExpr Token (([Var], String, Arguments) -> Statement)
-> SymbExpr Token ([Var], String, Arguments)
-> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token ([Var], String, Arguments)
maybe_action AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  AltExpr Token Statement
-> OO [] AltExpr Token Statement -> OO [] AltExpr Token Statement
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Statement
Query (Term -> Statement)
-> SymbExpr Token Char -> AltExpr Token (Term -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?' AltExpr Token (Term -> Statement)
-> BNF Token Term -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  AltExpr Token Statement
-> AltExpr Token Statement -> OO [] AltExpr Token Statement
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Statement
Query (Term -> Statement) -> (Term -> Term) -> Term -> Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Statement)
-> SymbExpr Token String -> AltExpr Token (Term -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?" AltExpr Token (Term -> Statement)
-> BNF Token Term -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  where actioner :: SymbExpr Token (([Var], String, Arguments) -> Statement)
actioner = String
"actioner" 
          String
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
-> SymbExpr Token (([Var], String, Arguments) -> Statement)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
Trigger ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms)))  (([Var], String, Arguments) -> Statement)
-> SymbExpr Token (Maybe Char)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!')
          AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
AddEvent ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms))) (([Var], String, Arguments) -> Statement)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' 
          AltExpr Token (([Var], String, Arguments) -> Statement)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
RemEvent ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms))) (([Var], String, Arguments) -> Statement)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-'
        maybe_action :: SymbExpr Token ([Var], String, Arguments)
maybe_action = String
"action-statement" 
            String
-> OO [] AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (String -> Arguments -> ([Var], String, Arguments))
-> SymbExpr Token ([Var], String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application ([],,)
            SymbExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
-> OO [] AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ((\[Var]
xs (String
d,Arguments
args) -> ([Var]
xs,String
d,Arguments
args)) ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token String
-> AltExpr
     Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr
  Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token [Var]
-> AltExpr
     Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token Char
-> AltExpr
     Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token (String, Arguments)
-> AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (String -> Arguments -> (String, Arguments))
-> SymbExpr Token (String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application (,))
 
statement_phrase :: BNF Token Phrase 
statement_phrase :: BNF Token Phrase
statement_phrase = String
"statement-phrase"
  String -> OO [] AltExpr Token Phrase -> BNF Token Phrase
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (([Var], String, Arguments) -> Phrase)
-> ([Var], String, Arguments) -> Phrase
forall a b. (a -> b) -> a -> b
($) ((([Var], String, Arguments) -> Phrase)
 -> ([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (([Var], String, Arguments) -> Phrase)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (([Var], String, Arguments) -> Phrase)
actioner AltExpr Token (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token ([Var], String, Arguments)
-> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token ([Var], String, Arguments)
maybe_action AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase)
-> SymbExpr Token Char -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?' AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  AltExpr Token Phrase
-> AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase) -> (Term -> Term) -> Term -> Phrase
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Phrase)
-> SymbExpr Token String -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?" AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
  where actioner :: SymbExpr Token (([Var], String, Arguments) -> Phrase)
actioner = String
"actioner" 
          String
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (([Var], String, Arguments) -> Phrase)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
PTrigger [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms))  (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (Maybe Char)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!')
          AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
Create [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms)) (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' 
          AltExpr Token (([Var], String, Arguments) -> Phrase)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
Terminate [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms)) (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-'
        maybe_action :: SymbExpr Token ([Var], String, Arguments)
maybe_action = String
"action-statement" 
            String
-> OO [] AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (String -> Arguments -> ([Var], String, Arguments))
-> SymbExpr Token ([Var], String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application ([],,)
            SymbExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
-> OO [] AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ((\[Var]
xs (String
d,Arguments
args) -> ([Var]
xs,String
d,Arguments
args)) ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token String
-> AltExpr
     Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr
  Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token [Var]
-> AltExpr
     Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token Char
-> AltExpr
     Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token (String, Arguments)
-> AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (String -> Arguments -> (String, Arguments))
-> SymbExpr Token (String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application (,))
 
phrase_scenario :: BNF Token [Phrase]
phrase_scenario :: BNF Token [Phrase]
phrase_scenario = String
"phrase-scenario" String -> BNF Token [Phrase] -> BNF Token [Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token Phrase -> BNF Token [Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (BNF Token Phrase
syn_phrase BNF Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')

syn_directives_phrases :: BNF Token [Either Directive Phrase]
syn_directives_phrases :: BNF Token [Either Directive Phrase]
syn_directives_phrases = String
"opt.directives.phrases" String
-> BNF Token [Either Directive Phrase]
-> BNF Token [Either Directive Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Either Directive Phrase]
-> [Either Directive Phrase] -> BNF Token [Either Directive Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef 
  (OO [] AltExpr Token (Either Directive Phrase)
-> SymbExpr Token Char -> BNF Token [Either Directive Phrase]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
someSepBy1 (Directive -> Either Directive Phrase
forall a b. a -> Either a b
Left (Directive -> Either Directive Phrase)
-> SymbExpr Token Directive
-> AltExpr Token (Either Directive Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Directive
syn_directive AltExpr Token (Either Directive Phrase)
-> AltExpr Token (Either Directive Phrase)
-> OO [] AltExpr Token (Either Directive Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Phrase -> Either Directive Phrase
forall a b. b -> Either a b
Right (Phrase -> Either Directive Phrase)
-> BNF Token Phrase -> AltExpr Token (Either Directive Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Phrase
syn_phrase) (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.') 
   BNF Token [Either Directive Phrase]
-> SymbExpr Token (Maybe Char)
-> AltExpr Token [Either Directive Phrase]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')) [] 

syn_directive :: BNF Token Directive
syn_directive :: SymbExpr Token Directive
syn_directive = String
"directive" String -> OO [] AltExpr Token Directive -> SymbExpr Token Directive
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> 
       String -> Directive
Include (String -> Directive)
-> SymbExpr Token String -> AltExpr Token (String -> Directive)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#include" AltExpr Token (String -> Directive)
-> SymbExpr Token String -> AltExpr Token Directive
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit
  AltExpr Token Directive
-> AltExpr Token Directive -> OO [] AltExpr Token Directive
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> Directive
Require (String -> Directive)
-> SymbExpr Token String -> AltExpr Token (String -> Directive)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#require" AltExpr Token (String -> Directive)
-> SymbExpr Token String -> AltExpr Token Directive
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit

syn_phrases :: BNF Token [Phrase]
syn_phrases :: BNF Token [Phrase]
syn_phrases = String
"opt.phrase" String -> BNF Token [Phrase] -> BNF Token [Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Phrase] -> [Phrase] -> BNF Token [Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef 
  (BNF Token Phrase -> SymbExpr Token Char -> BNF Token [Phrase]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
someSepBy1 BNF Token Phrase
syn_phrase (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.') BNF Token [Phrase]
-> SymbExpr Token (Maybe Char) -> AltExpr Token [Phrase]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')) []
 
syn_phrase :: BNF Token Phrase
syn_phrase :: BNF Token Phrase
syn_phrase = String
"phrase"
  String -> OO [] AltExpr Token Phrase -> BNF Token Phrase
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!') SymbExpr Token (Maybe Char)
-> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
PTrigger 
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+'  SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Create 
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-'  SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Terminate
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'~'  SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Obfuscate 
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase)
-> SymbExpr Token Char -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?'  AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr 
  AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase) -> (Term -> Term) -> Term -> Phrase
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Phrase)
-> SymbExpr Token String -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?"  AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr  
  AltExpr Token Phrase
-> AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Decl] -> Phrase
PDeclBlock ([Decl] -> Phrase) -> SymbExpr Token [Decl] -> AltExpr Token Phrase
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Decl]
declarations