@@ -23,9 +23,9 @@ acceptableConstructor _ = False
24mkFin : Nat -> Nat -> Elab Raw
24mkFin : Nat -> Nat -> Elab Raw
25mkFin Z j = fail [TermPart `(Fin Z), TextPart "is uninhabitable!"]
25mkFin Z j = fail [TermPart `(Fin Z), TextPart "is uninhabitable!"]
26−mkFin (S k) Z = return `(FZ {k=~(quote k)})
26+mkFin (S k) Z = pure `(FZ {k=~(quote k)})
27mkFin (S k) (S j) = do i <- mkFin k j
27mkFin (S k) (S j) = do i <- mkFin k j
28− return `(FS {k=~(quote k)} ~i)
28+ pure `(FS {k=~(quote k)} ~i)
30mkToClause : TTName -> (size, i : Nat) ->
30mkToClause : TTName -> (size, i : Nat) ->
31 (constr : (TTName, List CtorArg, Raw)) ->
31 (constr : (TTName, List CtorArg, Raw)) ->
@@ -40,14 +40,14 @@ mkFromClause : TTName -> (size, i : Nat) ->
40 (constr : (TTName, List CtorArg, Raw)) ->
40 (constr : (TTName, List CtorArg, Raw)) ->
41 Elab (FunClause Raw)
41 Elab (FunClause Raw)
42mkFromClause fn size i (n, [], Var ty) =
42mkFromClause fn size i (n, [], Var ty) =
43− return $ MkFunClause (RApp (Var fn) !(mkFin size i)) (Var n)
43+ pure $ MkFunClause (RApp (Var fn) !(mkFin size i)) (Var n)
44mkFromClause fn size i (n, _, ty) =
44mkFromClause fn size i (n, _, ty) =
45 fail [TextPart "unsupported constructor", NamePart n]
45 fail [TextPart "unsupported constructor", NamePart n]
48mkOk1Clause : TTName -> (size, i : Nat) -> (constr : (TTName, List CtorArg, Raw)) -> Elab (FunClause Raw)
48mkOk1Clause : TTName -> (size, i : Nat) -> (constr : (TTName, List CtorArg, Raw)) -> Elab (FunClause Raw)
49mkOk1Clause fn size i (n, [], Var ty) =
49mkOk1Clause fn size i (n, [], Var ty) =
50− return $ MkFunClause (RApp (Var fn) (Var n))
50+ pure $ MkFunClause (RApp (Var fn) (Var n))
51 [| (Var (UN "Refl")) (Var ty) (Var n) |]
51 [| (Var (UN "Refl")) (Var ty) (Var n) |]
52mkOk1Clause fn size i (n, _, ty) =
52mkOk1Clause fn size i (n, _, ty) =
53 fail [TextPart "unsupported constructor", NamePart n]
53 fail [TextPart "unsupported constructor", NamePart n]
@@ -55,7 +55,7 @@ mkOk1Clause fn size i (n, _, ty) =
56mkOk2Clause : TTName -> (size, i : Nat) -> (constr : (TTName, List CtorArg, Raw)) -> Elab (FunClause Raw)
56mkOk2Clause : TTName -> (size, i : Nat) -> (constr : (TTName, List CtorArg, Raw)) -> Elab (FunClause Raw)
57mkOk2Clause fn size i (n, [], Var ty) =
57mkOk2Clause fn size i (n, [], Var ty) =
58− return $ MkFunClause (RApp (Var fn) !(mkFin size i))
58+ pure $ MkFunClause (RApp (Var fn) !(mkFin size i))
59 [| (Var `{Refl}) `(Fin ~(quote size))
59 [| (Var `{Refl}) `(Fin ~(quote size))
60 !(mkFin size i) |]
60 !(mkFin size i) |]
61mkOk2Clause fn size i (n, _, ty) =
61mkOk2Clause fn size i (n, _, ty) =
@@ -65,10 +65,10 @@ mkOk2Clause fn size i (n, _, ty) =
65mkToClauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
65mkToClauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
66mkToClauses fn size xs = mkToClauses' Z xs
66mkToClauses fn size xs = mkToClauses' Z xs
67 where mkToClauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
67 where mkToClauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
68− mkToClauses' k [] = return []
68+ mkToClauses' k [] = pure []
69 mkToClauses' k (x :: xs) = do rest <- mkToClauses' (S k) xs
69 mkToClauses' k (x :: xs) = do rest <- mkToClauses' (S k) xs
70 clause <- mkToClause fn size k x
70 clause <- mkToClause fn size k x
71− return $ clause :: rest
71+ pure $ clause :: rest
73||| Generate a clause for the end of a pattern-match on Fins that
73||| Generate a clause for the end of a pattern-match on Fins that
74||| declares its own impossibility.
74||| declares its own impossibility.
@@ -84,11 +84,11 @@ mkAbsurdFinClause fn goal size =
84 (RApp (Var fn) lhsArg)
84 (RApp (Var fn) lhsArg)
85 let rhs = RBind pv (PVar `(Fin Z : Type))
85 let rhs = RBind pv (PVar `(Fin Z : Type))
86 `(FinZElim {a=~(goal lhsArg)} ~(Var pv))
86 `(FinZElim {a=~(goal lhsArg)} ~(Var pv))
87− return $ MkFunClause lhs rhs
87+ pure $ MkFunClause lhs rhs
88 where lhsBody : TTName -> Nat -> Elab Raw
88 where lhsBody : TTName -> Nat -> Elab Raw
89− lhsBody f Z = return $ Var f
89+ lhsBody f Z = pure $ Var f
90 lhsBody f (S k) = do smaller <- lhsBody f k
90 lhsBody f (S k) = do smaller <- lhsBody f k
91− return `(FS {k=~(quote k)} ~smaller)
91+ pure `(FS {k=~(quote k)} ~smaller)
94mkFromClauses : TTName -> TTName -> Nat ->
94mkFromClauses : TTName -> TTName -> Nat ->
@@ -96,26 +96,26 @@ mkFromClauses : TTName -> TTName -> Nat ->
96mkFromClauses fn ty size xs = mkFromClauses' Z xs
96mkFromClauses fn ty size xs = mkFromClauses' Z xs
97 where mkFromClauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
97 where mkFromClauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
98 mkFromClauses' k [] =
98 mkFromClauses' k [] =
99− return [!(mkAbsurdFinClause fn (const (Var ty)) size)]
99+ pure [!(mkAbsurdFinClause fn (const (Var ty)) size)]
100 mkFromClauses' k (x :: xs) = do rest <- mkFromClauses' (S k) xs
100 mkFromClauses' k (x :: xs) = do rest <- mkFromClauses' (S k) xs
101 clause <- mkFromClause fn size k x
101 clause <- mkFromClause fn size k x
102− return $ clause :: rest
102+ pure $ clause :: rest
104mkOk1Clauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
104mkOk1Clauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
105mkOk1Clauses fn size xs = mkOk1Clauses' Z xs
105mkOk1Clauses fn size xs = mkOk1Clauses' Z xs
106 where mkOk1Clauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
106 where mkOk1Clauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
107− mkOk1Clauses' k [] = return []
107+ mkOk1Clauses' k [] = pure []
108 mkOk1Clauses' k (x :: xs) = do rest <- mkOk1Clauses' (S k) xs
108 mkOk1Clauses' k (x :: xs) = do rest <- mkOk1Clauses' (S k) xs
109 clause <- mkOk1Clause fn size k x
109 clause <- mkOk1Clause fn size k x
110− return $ clause :: rest
110+ pure $ clause :: rest
112mkOk2Clauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> (Raw -> Raw) -> Elab (List (FunClause Raw))
112mkOk2Clauses : TTName -> Nat -> List (TTName, List CtorArg, Raw) -> (Raw -> Raw) -> Elab (List (FunClause Raw))
113mkOk2Clauses fn size xs resTy = mkOk2Clauses' Z xs
113mkOk2Clauses fn size xs resTy = mkOk2Clauses' Z xs
114 where mkOk2Clauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
114 where mkOk2Clauses' : Nat -> List (TTName, List CtorArg, Raw) -> Elab (List (FunClause Raw))
115− mkOk2Clauses' k [] = return [!(mkAbsurdFinClause fn resTy size)]
115+ mkOk2Clauses' k [] = pure [!(mkAbsurdFinClause fn resTy size)]
116 mkOk2Clauses' k (x :: xs) = do rest <- mkOk2Clauses' (S k) xs
116 mkOk2Clauses' k (x :: xs) = do rest <- mkOk2Clauses' (S k) xs
117 clause <- mkOk2Clause fn size k x
117 clause <- mkOk2Clause fn size k x
118− return $ clause :: rest
118+ pure $ clause :: rest
121genToFin : (to, from, ok1, ok2, ty : TTName) -> Elab ()
121genToFin : (to, from, ok1, ok2, ty : TTName) -> Elab ()
@@ -153,7 +153,7 @@ genToFin to from ok1 ok2 ty =
153 ok2Clauses <- mkOk2Clauses ok2 size constrs ok2ResTy
153 ok2Clauses <- mkOk2Clauses ok2 size constrs ok2ResTy
154 defineFunction $ DefineFun ok2 ok2Clauses
154 defineFunction $ DefineFun ok2 ok2Clauses
156− return ()
156+ pure ()
159deriveFinite : Elab ()
159deriveFinite : Elab ()