diff --git a/cue/export.go b/cue/export.go
index 9f55532..e599c31 100644
--- a/cue/export.go
+++ b/cue/export.go
@@ -660,7 +660,7 @@
 			f.Optional = token.NoSpace.Pos()
 		}
 		if a.definition {
-			if p.mode.omitHidden || p.mode.concrete {
+			if p.mode.omitDefinitions || p.mode.concrete {
 				continue
 			}
 			f.Token = token.ISA
diff --git a/cue/types.go b/cue/types.go
index 8012301..e22a9f1 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -1029,8 +1029,9 @@
 // structVal returns an structVal or an error if v is not a struct.
 func (v Value) structValData(ctx *context) (structValue, *bottom) {
 	return v.structValOpts(ctx, options{
-		omitHidden:   true,
-		omitOptional: true,
+		omitHidden:      true,
+		omitDefinitions: true,
+		omitOptional:    true,
 	})
 }
 
@@ -1054,7 +1055,7 @@
 
 	// check if any fields can be omitted
 	needFilter := false
-	if o.omitHidden || o.omitOptional {
+	if o.omitHidden || o.omitOptional || o.omitDefinitions {
 		f := label(0)
 		for _, a := range obj.arcs {
 			f |= a.feature
@@ -1062,7 +1063,7 @@
 				needFilter = true
 				break
 			}
-			if a.definition && (o.omitHidden || o.concrete) {
+			if a.definition && (o.omitDefinitions || o.concrete) {
 				needFilter = true
 				break
 			}
@@ -1074,7 +1075,7 @@
 		arcs := make([]arc, len(obj.arcs))
 		k := 0
 		for _, a := range obj.arcs {
-			if a.definition && (o.omitHidden || o.concrete) {
+			if a.definition && (o.omitDefinitions || o.concrete) {
 				continue
 			}
 			if a.feature&hidden != 0 && o.omitHidden {
@@ -1164,7 +1165,7 @@
 // Fields creates an iterator over v's fields if v is a struct or an error
 // otherwise.
 func (v Value) Fields(opts ...Option) (Iterator, error) {
-	o := options{omitHidden: true, omitOptional: true}
+	o := options{omitDefinitions: true, omitHidden: true, omitOptional: true}
 	o.updateOptions(opts)
 	ctx := v.ctx()
 	obj, err := v.structValOpts(ctx, o)
@@ -1407,13 +1408,14 @@
 }
 
 type options struct {
-	concrete       bool // enforce that values are concrete
-	raw            bool // show original values
-	hasHidden      bool
-	omitHidden     bool
-	omitOptional   bool
-	omitAttrs      bool
-	disallowCycles bool // implied by concrete
+	concrete        bool // enforce that values are concrete
+	raw             bool // show original values
+	hasHidden       bool
+	omitHidden      bool
+	omitDefinitions bool
+	omitOptional    bool
+	omitAttrs       bool
+	disallowCycles  bool // implied by concrete
 }
 
 // An Option defines modes of evaluation.
@@ -1435,6 +1437,7 @@
 			p.concrete = true
 			if !p.hasHidden {
 				p.omitHidden = true
+				p.omitDefinitions = true
 			}
 		}
 	}
@@ -1457,18 +1460,30 @@
 	return func(p *options) {
 		p.omitAttrs = false
 		p.omitHidden = false
+		p.omitDefinitions = false
 		p.omitOptional = false
 	}
 }
 
-// Hidden indicates that hidden fields should be included.
+// Definitions indicates whether definitions should be included.
 //
-// Hidden fields may still be included if include is false,
-// even if a value is not concrete.
+// Definitions may still be included for certain functions if they are referred
+// to by other other values.
+func Definitions(include bool) Option {
+	return func(p *options) {
+		p.hasHidden = true
+		p.omitDefinitions = !include
+	}
+}
+
+// Hidden indicates that definitions and hidden fields should be included.
+//
+// Deprecated: Hidden fields are deprecated.
 func Hidden(include bool) Option {
 	return func(p *options) {
 		p.hasHidden = true
 		p.omitHidden = !include
+		p.omitDefinitions = !include
 	}
 }
 
