diff --git a/pkgs/yaml/lib/src/parser.dart b/pkgs/yaml/lib/src/parser.dart
index ddbfd4e..e924e40 100644
--- a/pkgs/yaml/lib/src/parser.dart
+++ b/pkgs/yaml/lib/src/parser.dart
@@ -174,9 +174,7 @@
 
     // Parse an explicit document.
     var start = token.span;
-    var pair = _processDirectives();
-    var versionDirective = pair.first;
-    var tagDirectives = pair.last;
+    var (versionDirective, tagDirectives) = _processDirectives();
     token = _scanner.peek()!;
     if (token.type != TokenType.documentStart) {
       throw YamlException('Expected document start.', token.span);
@@ -667,7 +665,7 @@
       ScalarEvent(location.pointSpan() as FileSpan, '', ScalarStyle.PLAIN);
 
   /// Parses directives.
-  Pair<VersionDirective?, List<TagDirective>> _processDirectives() {
+  (VersionDirective?, List<TagDirective>) _processDirectives() {
     var token = _scanner.peek()!;
 
     VersionDirective? versionDirective;
@@ -707,7 +705,7 @@
         TagDirective('!!', 'tag:yaml.org,2002:'), token.span.start.pointSpan(),
         allowDuplicates: true);
 
-    return Pair(versionDirective, tagDirectives);
+    return (versionDirective, tagDirectives);
   }
 
   /// Adds a tag directive to the directives stack.
diff --git a/pkgs/yaml/lib/src/scanner.dart b/pkgs/yaml/lib/src/scanner.dart
index 4b155e1..1cfd3af 100644
--- a/pkgs/yaml/lib/src/scanner.dart
+++ b/pkgs/yaml/lib/src/scanner.dart
@@ -1142,8 +1142,8 @@
     // Scan the leading line breaks to determine the indentation level if
     // needed.
     var pair = _scanBlockScalarBreaks(indent);
-    indent = pair.first;
-    var trailingBreaks = pair.last;
+    indent = pair.indent;
+    var trailingBreaks = pair.trailingBreaks;
 
     // Scan the block scalar contents.
     var buffer = StringBuffer();
@@ -1194,8 +1194,8 @@
 
       // Eat the following indentation and spaces.
       var pair = _scanBlockScalarBreaks(indent);
-      indent = pair.first;
-      trailingBreaks = pair.last;
+      indent = pair.indent;
+      trailingBreaks = pair.trailingBreaks;
     }
 
     // Chomp the tail.
@@ -1210,7 +1210,7 @@
   ///
   /// Determines the intendation level if needed. Returns the new indentation
   /// level and the text of the line breaks.
-  Pair<int, String> _scanBlockScalarBreaks(int indent) {
+  ({int indent, String trailingBreaks}) _scanBlockScalarBreaks(int indent) {
     var maxIndent = 0;
     var breaks = StringBuffer();
 
@@ -1238,7 +1238,7 @@
       // be supported by the spec.
     }
 
-    return Pair(indent, breaks.toString());
+    return (indent: indent, trailingBreaks: breaks.toString());
   }
 
   // Scans a quoted scalar.
diff --git a/pkgs/yaml/lib/src/utils.dart b/pkgs/yaml/lib/src/utils.dart
index d9e20d1..0dc132f 100644
--- a/pkgs/yaml/lib/src/utils.dart
+++ b/pkgs/yaml/lib/src/utils.dart
@@ -7,17 +7,6 @@
 
 import 'package:source_span/source_span.dart';
 
-/// A pair of values.
-class Pair<E, F> {
-  final E first;
-  final F last;
-
-  Pair(this.first, this.last);
-
-  @override
-  String toString() => '($first, $last)';
-}
-
 /// Print a warning.
 ///
 /// If [span] is passed, associates the warning with that span.
