@@ -116,22 +116,62 @@ data NameType =
116116
117117||| Types annotations for bound variables in different
118118||| binding contexts
119−data Binder a = Lam a
120− | Pi a a
121− | Let a a
122− | NLet a a
123− | Hole a
124− | GHole a
125− | Guess a a
126− | PVar a
127− | PVTy a
119+|||
120+||| @ tmTy the terms that can occur inside the binder, as type
121+||| annotations or bound values
122+data Binder : (tmTy : Type) -> Type where
123+ ||| Lambdas
124+ |||
125+ ||| @ ty the type of the argument
126+ Lam : (ty : a) -> Binder a
127+
128+ ||| Function types.
129+ |||
130+ ||| @ kind The kind of arrow. Only relevant when dealing with
131+ ||| uniqueness, so you can usually pretend that this
132+ ||| field doesn't exist. For ordinary functions, use the
133+ ||| type of types here.
134+ Pi : (ty, kind : a) -> Binder a
135+
136+ ||| A let binder
137+ |||
138+ ||| @ ty the type of the bound variable
139+ ||| @ val the bound value
140+ Let : (ty, val : a) -> Binder a
141+
142+ ||| A hole that can occur during elaboration, and must be filled
143+ |||
144+ ||| @ ty the type of the value that will eventually be put into the hole
145+ Hole : (ty : a) -> Binder a
146+
147+ ||| A hole that will later become a top-level metavariable
148+ GHole : (ty : a) -> Binder a
149+
150+ ||| A hole with a solution in it. Computationally inert.
151+ |||
152+ ||| @ ty the type of the value in the hole
153+ ||| @ val the value in the hole
154+ Guess : (ty, val : a) -> Binder a
155+
156+ ||| A pattern variable. These bindings surround the terms that make
157+ ||| up the left and right sides of pattern-matching definition
158+ ||| clauses.
159+ |||
160+ ||| @ ty the type of the pattern variable
161+ PVar : (ty : a) -> Binder a
162+
163+ ||| The type of a pattern binding. This is to `PVar` as `Pi` is to
164+ ||| `Lam`.
165+ |||
166+ ||| @ ty the type of the pattern variable
167+ PVTy : (ty : a) -> Binder a
168+
128169%name Binder b, b'
129170
130171instance Functor Binder where
131172 map f (Lam x) = Lam (f x)
132173 map f (Pi x k) = Pi (f x) (f k)
133174 map f (Let x y) = Let (f x) (f y)
134− map f (NLet x y) = NLet (f x) (f y)
135175 map f (Hole x) = Hole (f x)
136176 map f (GHole x) = GHole (f x)
137177 map f (Guess x y) = Guess (f x) (f y)
@@ -142,7 +182,6 @@ instance Foldable Binder where
142182 foldr f z (Lam x) = f x z
143183 foldr f z (Pi x k) = f x (f k z)
144184 foldr f z (Let x y) = f x (f y z)
145− foldr f z (NLet x y) = f x (f y z)
146185 foldr f z (Hole x) = f x z
147186 foldr f z (GHole x) = f x z
148187 foldr f z (Guess x y) = f x (f y z)
@@ -153,14 +192,13 @@ instance Traversable Binder where
153192 traverse f (Lam x) = [| Lam (f x) |]
154193 traverse f (Pi x k) = [| Pi (f x) (f k) |]
155194 traverse f (Let x y) = [| Let (f x) (f y) |]
156− traverse f (NLet x y) = [| NLet (f x) (f y) |]
157195 traverse f (Hole x) = [| Hole (f x) |]
158196 traverse f (GHole x) = [| GHole (f x) |]
159197 traverse f (Guess x y) = [| Guess (f x) (f y) |]
160198 traverse f (PVar x) = [| PVar (f x) |]
161199 traverse f (PVTy x) = [| PVTy (f x) |]
162200
163−||| Universes
201+||| The various universes involved in the uniqueness mechanism
164202data Universe = NullType | UniqueType | AllTypes
165203
166204||| Reflection of the well typed core language
@@ -199,8 +237,18 @@ data Raw =
199237 RConstant Const
200238%name Raw tm, tm'
201239
202−data SourceLocation : Type where
203− FileLoc : (filename : String) -> (start : (Int, Int)) -> (end : (Int, Int)) -> SourceLocation
240+||| A source location in an Idris file
241+record SourceLocation where
242+ ||| Either a source span or a source location. `start` and `end`
243+ ||| will be the same if it's a point location.
244+ constructor FileLoc
245+
246+ ||| The file name of the source location
247+ filename : String
248+ ||| The line and column of the beginning of the source span
249+ start : (Int, Int)
250+ ||| The line and column of the end of the source span
251+ end : (Int, Int)
204252
205253%name SourceLocation loc
206254
@@ -218,7 +266,7 @@ data ErrorReportPart =
218266 SubReport (List ErrorReportPart)
219267%name ErrorReportPart part, p
220268
221−||| A representation of Idris's tactics that can be returned from custom
269+||| A representation of Idris's old tactics that can be returned from custom
222270||| tactic implementations. Generate these using `applyTactic`.
223271data Tactic =
224272 ||| Try the first tactic and resort to the second one on failure
@@ -277,6 +325,7 @@ data Tactic =
277325 Fail (List ErrorReportPart) |
278326 ||| Attempt to fill the hole with source code information
279327 SourceFC
328+
280329%name Tactic tac, tac'
281330
282331
@@ -564,8 +613,6 @@ mutual
564613 ~(assert_total (quote k)))
565614 quote (Let x y) = `(Let {a=TT} ~(assert_total (quote x))
566615 ~(assert_total (quote y)))
567− quote (NLet x y) = `(NLet {a=TT} ~(assert_total (quote x))
568− ~(assert_total (quote y)))
569616 quote (Hole x) = `(Hole {a=TT} ~(assert_total (quote x)))
570617 quote (GHole x) = `(GHole {a=TT} ~(assert_total (quote x)))
571618 quote (Guess x y) = `(Guess {a=TT} ~(assert_total (quote x))
@@ -586,7 +633,6 @@ mutual
586633 quoteRawBinderTT (Lam x) = `(Lam {a=Raw} ~(quoteRawTT x))
587634 quoteRawBinderTT (Pi x k) = `(Pi {a=Raw} ~(quoteRawTT x) ~(quoteRawTT k))
588635 quoteRawBinderTT (Let x y) = `(Let {a=Raw} ~(quoteRawTT x) ~(quoteRawTT y))
589− quoteRawBinderTT (NLet x y) = `(NLet {a=Raw} ~(quoteRawTT x) ~(quoteRawTT y))
590636 quoteRawBinderTT (Hole x) = `(Hole {a=Raw} ~(quoteRawTT x))
591637 quoteRawBinderTT (GHole x) = `(GHole {a=Raw} ~(quoteRawTT x))
592638 quoteRawBinderTT (Guess x y) = `(Guess {a=Raw} ~(quoteRawTT x) ~(quoteRawTT y))
@@ -614,7 +660,6 @@ mutual
614660 quoteRawBinderRaw (Lam x) = `(Lam {a=Raw} ~(quoteRawRaw x))
615661 quoteRawBinderRaw (Pi x k) = `(Pi {a=Raw} ~(quoteRawRaw x) ~(quoteRawRaw k))
616662 quoteRawBinderRaw (Let x y) = `(Let {a=Raw} ~(quoteRawRaw x) ~(quoteRawRaw y))
617− quoteRawBinderRaw (NLet x y) = `(NLet {a=Raw} ~(quoteRawRaw x) ~(quoteRawRaw y))
618663 quoteRawBinderRaw (Hole x) = `(Hole {a=Raw} ~(quoteRawRaw x))
619664 quoteRawBinderRaw (GHole x) = `(GHole {a=Raw} ~(quoteRawRaw x))
620665 quoteRawBinderRaw (Guess x y) = `(Guess {a=Raw} ~(quoteRawRaw x) ~(quoteRawRaw y))