diff --git a/internal/core/adt/context.go b/internal/core/adt/context.go
index f54fd72..29ffed5 100644
--- a/internal/core/adt/context.go
+++ b/internal/core/adt/context.go
@@ -558,7 +558,8 @@
 		}
 		// TODO: if the struct was a literal struct, we can also treat it as
 		// closed and make this a permanent error.
-		c.addErrf(code, pos, "undefined field %s", l.SelectorString(c.Runtime))
+		label := l.SelectorString(c.Runtime)
+		c.addErrf(code, pos, "undefined field %s", label)
 	}
 	return a
 }
diff --git a/internal/core/adt/default.go b/internal/core/adt/default.go
index ae7ca8e..2dd1ff7 100644
--- a/internal/core/adt/default.go
+++ b/internal/core/adt/default.go
@@ -43,35 +43,45 @@
 
 // Default returns the default value or itself if there is no default.
 func (v *Vertex) Default() *Vertex {
-	d, ok := v.Value.(*Disjunction)
-	if !ok {
-		return v
-	}
-
-	var w *Vertex
-
-	switch d.NumDefaults {
-	case 0:
-		return v
-	case 1:
-		w = d.Values[0]
+	switch d := v.Value.(type) {
 	default:
-		x := *v
-		x.Value = &Disjunction{
-			Src:         d.Src,
-			Values:      d.Values[:d.NumDefaults],
-			NumDefaults: 0,
-		}
-		w = &x
-	}
+		return v
 
-	w.Conjuncts = nil
-	for _, c := range v.Conjuncts {
-		// TODO: preserve field information.
-		expr, _ := stripNonDefaults(c.Expr())
-		w.AddConjunct(MakeConjunct(c.Env, expr))
+	case *Disjunction:
+		var w *Vertex
+
+		switch d.NumDefaults {
+		case 0:
+			return v
+		case 1:
+			w = d.Values[0]
+		default:
+			x := *v
+			x.Value = &Disjunction{
+				Src:         d.Src,
+				Values:      d.Values[:d.NumDefaults],
+				NumDefaults: 0,
+			}
+			w = &x
+		}
+
+		w.Conjuncts = nil
+		for _, c := range v.Conjuncts {
+			// TODO: preserve field information.
+			expr, _ := stripNonDefaults(c.Expr())
+			w.Conjuncts = append(w.Conjuncts, MakeConjunct(c.Env, expr))
+		}
+		return w
+
+	case *ListMarker:
+		m := *d
+		m.IsOpen = false
+
+		w := *v
+		w.Closed = nil
+		w.Value = &m
+		return &w
 	}
-	return w
 }
 
 // TODO: this should go: record preexpanded disjunctions in Vertex.
