summaryrefslogtreecommitdiff
path: root/src/elab_util.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2015-12-20 13:41:35 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2015-12-20 13:41:35 -0500
commit7bf4f9f063dcdc9fc50ad6ac6143b113535b68f0 (patch)
tree9e0153c58684ffc14955e809cb884dfe373c6779 /src/elab_util.sml
parentee1a68c223c13b323121f67e8f135160d521d3fd (diff)
Unnest properly in presence of kind polymorphism
Diffstat (limited to 'src/elab_util.sml')
-rw-r--r--src/elab_util.sml6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/elab_util.sml b/src/elab_util.sml
index acc696dd..ed2e82a0 100644
--- a/src/elab_util.sml
+++ b/src/elab_util.sml
@@ -116,6 +116,12 @@ fun exists f k =
S.Return _ => true
| S.Continue _ => false
+fun foldB {kind, bind} ctx st k =
+ case mapfoldB {kind = fn ctx => fn k => fn st => S.Continue (k, kind (ctx, k, st)),
+ bind = bind} ctx k st of
+ S.Continue (_, st) => st
+ | S.Return _ => raise Fail "ElabUtil.Kind.foldB: Impossible"
+
end
val mliftConInCon = ref (fn n : int => fn c : con => (raise Fail "You didn't set ElabUtil.mliftConInCon!") : con)