diff --git a/unicode/cldr/cldr.go b/unicode/cldr/cldr.go
index 2197f8a..052845f 100644
--- a/unicode/cldr/cldr.go
+++ b/unicode/cldr/cldr.go
@@ -5,14 +5,15 @@
 //go:generate go run makexml.go -output xml.go
 
 // Package cldr provides a parser for LDML and related XML formats.
-// This package is intended to be used by the table generation tools
-// for the various internationalization-related packages.
-// As the XML types are generated from the CLDR DTD, and as the CLDR standard
-// is periodically amended, this package may change considerably over time.
-// This mostly means that data may appear and disappear between versions.
-// That is, old code should keep compiling for newer versions, but data
-// may have moved or changed.
-// CLDR version 22 is the first version supported by this package.
+//
+// This package is intended to be used by the table generation tools for the
+// various packages in x/text and is not internal for historical reasons.
+//
+// As the XML types are generated from the CLDR DTD, and as the CLDR standard is
+// periodically amended, this package may change considerably over time. This
+// mostly means that data may appear and disappear between versions. That is,
+// old code should keep compiling for newer versions, but data may have moved or
+// changed. CLDR version 22 is the first version supported by this package.
 // Older versions may not work.
 package cldr // import "golang.org/x/text/unicode/cldr"
 
@@ -94,6 +95,12 @@
 
 // LDML returns the fully resolved LDML XML for loc, which must be one of
 // the strings returned by Locales.
+//
+// Deprecated: use RawLDML and implement inheritance manually or using the
+// internal cldrtree package.
+// Inheritance has changed quite a bit since the onset of this package and in
+// practice data often represented in a way where knowledge of how it was
+// inherited is relevant.
 func (cldr *CLDR) LDML(loc string) (*LDML, error) {
 	return cldr.resolve(loc)
 }
diff --git a/unicode/cldr/decode.go b/unicode/cldr/decode.go
index 094d431..bb4d4d1 100644
--- a/unicode/cldr/decode.go
+++ b/unicode/cldr/decode.go
@@ -58,9 +58,10 @@
 			if len(d.dirFilter) > 0 && !in(d.dirFilter, m[1]) {
 				continue
 			}
-			var r io.Reader
+			var r io.ReadCloser
 			if r, err = l.Reader(i); err == nil {
 				err = d.decode(m[1], m[2], r)
+				r.Close()
 			}
 			if err != nil {
 				return nil, err
diff --git a/unicode/cldr/examples_test.go b/unicode/cldr/examples_test.go
index 1a69b00..85d79d1 100644
--- a/unicode/cldr/examples_test.go
+++ b/unicode/cldr/examples_test.go
@@ -2,10 +2,85 @@
 
 import (
 	"fmt"
+	"os"
+	"path/filepath"
 
+	"golang.org/x/text/internal/gen"
 	"golang.org/x/text/unicode/cldr"
 )
 
+func ExampleDecoder() {
+	// Obtain the default CLDR reader (only for x/text packages).
+
+	var d cldr.Decoder
+
+	// Speed up decoding by setting filters for only what you need.
+	d.SetDirFilter("main", "supplemental")
+	d.SetSectionFilter("numbers", "plurals")
+
+	cldr, err := d.DecodeZip(gen.OpenCLDRCoreZip())
+	if err != nil {
+		fmt.Println("ERROR", err)
+		return
+	}
+	supplemental := cldr.Supplemental()
+
+	fmt.Println(supplemental.MeasurementData.MeasurementSystem[0].Type)
+	for _, lang := range cldr.Locales() {
+		data := cldr.RawLDML(lang)
+		fmt.Println(lang, data.Identity.Version.Number)
+	}
+}
+
+func ExampleDecoder_DecodePath() {
+	// This directory will exist if a go generate has been run in any of the
+	// packages in x/text using the cldr package.
+	path := filepath.FromSlash("../../DATA/cldr/" + cldr.Version)
+
+	var d cldr.Decoder
+
+	// Speed up decoding by setting filters for only what you need.
+	d.SetDirFilter("main")
+	d.SetSectionFilter("numbers")
+
+	cldr, err := d.DecodePath(path)
+	if err != nil {
+		// handle error
+		fmt.Println("ERROR", err)
+		return
+	}
+	for _, lang := range cldr.Locales() {
+		if numbers := cldr.RawLDML(lang).Numbers; numbers != nil {
+			fmt.Println(lang, len(numbers.Symbols))
+		}
+	}
+}
+
+func ExampleDecoder_DecodeZip() {
+	// This directory will exist if a go generate has been run in any of the
+	// packages in x/text using the cldr package.
+	path := filepath.FromSlash("../../DATA/cldr/" + cldr.Version)
+
+	var d cldr.Decoder
+
+	r, err := os.Open(filepath.Join(path, "core.zip"))
+	if err != nil {
+		fmt.Println("error:", err)
+		return
+	}
+
+	// Only loading supplemental data can be done much faster using a dir
+	// filter.
+	d.SetDirFilter("supplemental")
+	cldr, err := d.DecodeZip(r)
+	if err != nil {
+		fmt.Println("error:", err)
+		return
+	}
+
+	fmt.Println(cldr.Supplemental().MeasurementData.MeasurementSystem[0].Type)
+}
+
 func ExampleSlice() {
 	var dr *cldr.CLDR // assume this is initialized
 
