@@ -29,10 +29,13 @@ unary_occ name tac = tac <$> (identifier name *> variable)
2929variadic_occ :: T. Text -> ([OccName ] -> TacticsM () ) -> Parser (TacticsM () )
3030variadic_occ name tac = tac <$> (identifier name *> P. many variable)
3131
32-
33- tactic :: Parser ( TacticsM () )
34- tactic = flip P. makeExprParser operators $ P. choice
32+ oneTactic :: Parser ( TacticsM () )
33+ oneTactic =
34+ P. choice
3535 [ braces tactic
36+ -- TODO(sandy): lean uses braces for control flow, but i always forget
37+ -- and want to use parens. is there a semantic difference?
38+ , parens tactic
3639 , nullary " assumption" assumption
3740 , unary_occ " assume" assume
3841 , variadic_occ " intros" $ \ case
@@ -42,19 +45,25 @@ tactic = flip P.makeExprParser operators $ P.choice
4245 , nullary " destruct_all" destructAll
4346 , unary_occ " destruct" $ useNameFromHypothesis destruct
4447 , unary_occ " homo" $ useNameFromHypothesis homo
48+ , nullary " application" application
4549 , unary_occ " apply" $ useNameFromHypothesis apply
46- , unary_occ " split" userSplit
50+ , nullary " split" split
51+ , unary_occ " ctor" userSplit
4752 , nullary " obvious" obvious
4853 , nullary " auto" auto
49- , R. try <$> (keyword " try" *> tactic)
5054 ]
5155
56+
57+ tactic :: Parser (TacticsM () )
58+ tactic = flip P. makeExprParser operators oneTactic
59+
5260bindOne :: TacticsM a -> TacticsM a -> TacticsM a
5361bindOne t t1 = t R. <@> [t1]
5462
5563operators :: [[P. Operator Parser (TacticsM () )]]
5664operators =
5765 [ [ P. Prefix (symbol " *" $> R. many_) ]
66+ , [ P. Prefix (symbol " try" $> R. try) ]
5867 , [ P. InfixR (symbol " |" $> (R. <%>) )]
5968 , [ P. InfixL (symbol " ;" $> (>>) )
6069 , P. InfixL (symbol " ," $> bindOne)
0 commit comments