shimmer-0.1.1: src/SMR/CLI/Help.hs
module SMR.CLI.Help where
helpCommands :: String
helpCommands
= unlines $
[ " :quit,:q Quit the REPL."
, " :help Show this Help page."
, " :grammar Show the language grammar."
, " :prims Show the list of available primitives."
, " :reload,:r Reload the current source files."
, " :decls NAMES? Show named declarations, or all decls if no names given."
, " :parse EXP Parse an expression and print it back."
, " :push EXP Push down substitutions in an expression."
, " :step EXP Single step evaluate an expression."
, " :steps EXP Multi-step evaluate an expression."
, " :trace EXP Multi-step evaluate an expression, showing intermediate states." ]
helpGrammar :: String
helpGrammar
= unlines $
[ " Decl ::= '@' Name Param* '=' Exp ';' (Macro declaration)"
, ""
, " Exp ::= Ref (External reference)"
, " | Key Exp (Keyword application)"
, " | Exp Exp+ (Function application)"
, " | Name ('^' Nat)? (Variable with lifting specifier)"
, " | '\\' Param+ '.' Exp (Function abstraction)"
, " | Train '.' Exp (Substitution train)"
, ""
, " Ref ::= '@' Name (Macro reference)"
, " | '%' Name (Symbol reference)"
, " | '#' Name (Primitive reference)"
, " | '?' Nat (Nominal reference)"
, ""
, " Key ::= '##tag' (Tag an expression)"
, " | '##seq' (Sequence evaluation)"
, " | '##box' (Box an expression, delaying evaluation)"
, " | '##run' (Run an expression, forcing evaluation)"
, ""
, " Param ::= Name (Call-by-value parameter)"
, " | '!' Name (Explicitly call-by-value parameter)"
, " | '~' Name (Explicitly call-by-name parameter)"
, ""
, " Train ::= Car+ (Substitution train)"
, ""
, " Car ::= '[' Bind,* ']' (Simultaneous substitution)"
, " | '[[' Bind,* ']]' (Recursive substitution)"
, " | '{' Bump,* '}' (Lifting specifier)"
, ""
, " Bind ::= Name ('^' Nat)? '=' Exp (Variable substitution binding)"
, " | '?' Nat '=' Exp (Nominal substitution binding)"
, ""
, " Bump ::= Name ('^' Nat)? ':' Nat (Lifting bump)"
]