@@ -115,7 +115,7 @@ f k _¹ (C _² _³) (succ zero)
115115
116116* replace ` _¹ ` with ` ?¹ `
117117* we know that ` ?¹ : F k `
118- * looking up ` t ` yields type ` T ?² ?³ `
118+ * elaborating ` (C _² _³) ` yields type ` T ?² ?³ `
119119* produce a constraint ` ?¹ ~ T ?² ?³ `
120120
121121## How do constraints work
@@ -215,6 +215,10 @@ Bottom line: this is a design study
215215* each constraint raised gets an opportunity to be solved/simplified immediately by the user-supplied solver
216216* if it doesn't - we can freeze the problem and return a meta in place of the typechecked solution
217217
218+ ## Design overview
219+
220+ ![ ] ( ./architecture-diagram.pdf )
221+
218222## Open questions
219223
220224::: incremental
@@ -236,17 +240,22 @@ Current idea:
236240
237241* there is machinery in Haskell to declare interfaces [ @pangPluggingHaskell2004 ]
238242* what should the interface look like?
239- * ```
243+ ```
240244 data SolverTag = ...
241245
242- type Solver = ConstraintF c -> (Set (ConstraintF c), Map MetaId Term)
246+ type Solver = ConstraintF c -> ( Set (ConstraintF c)
247+ , Map MetaId Term )
243248
244249 data PluginInterface = Plugin {
245250 solvers :: Map SolverTag Solver,
246251 solverTags :: [SolverTag],
247252 priorities :: [(SolverTag, SolverTag)]
248253 }
249-
254+ ```
255+
256+ ## how does dynamic linking interfere with what we can do
257+
258+ ```
250259 instance ConstraintMap constraintTag ConstraintType where
251260 ...
252261
@@ -269,7 +278,7 @@ Current idea:
269278* Lean
270279 * uses macros to redefine symbols
271280 * uses reflection and typechecking monads to define custom elaboration procedures
272- * TypeOS
281+ * TypOS
273282 * you have to buy into a whole new discipline
274283 * we hope to keep things a bit more conventional engineering-wise
275284
0 commit comments