diff --git a/src/libraries/stdlib/extlib.ml b/src/libraries/stdlib/extlib.ml
index 51d4e1917ed6b063fe0d72ed0b84770f81e47a39..e6267f35c0f3bc5d808ccbbac287b0c76eef3bbe 100644
--- a/src/libraries/stdlib/extlib.ml
+++ b/src/libraries/stdlib/extlib.ml
@@ -77,6 +77,14 @@ let uncurry f x = f (fst x) (snd x)
 let iter_uncurry2 iter f v =
   iter (fun a b -> f (a, b)) v
 
+(* ************************************************************************* *)
+(** {2 Tuples} *)
+(* ************************************************************************* *)
+
+let nest b (a, c) = (a, b), c
+
+let flatten ((a, b), c) = a, b, c
+
 (* ************************************************************************* *)
 (** {2 Lists} *)
 (* ************************************************************************* *)
diff --git a/src/libraries/stdlib/extlib.mli b/src/libraries/stdlib/extlib.mli
index 79addc0d2c015347c0eafc0a1a55a26f2893ddaf..1ef17c991ac2e33786a6ca9cff42675ad0a05a8a 100644
--- a/src/libraries/stdlib/extlib.mli
+++ b/src/libraries/stdlib/extlib.mli
@@ -77,6 +77,17 @@ val iter_uncurry2:
   (('a -> 'b -> unit) -> 'c -> unit) ->
   (('a * 'b -> unit) -> 'c -> unit)
 
+(* ************************************************************************* *)
+(** {2 Tuples} *)
+(* ************************************************************************* *)
+
+val nest: 'b -> 'a * 'c -> ('a * 'b) * 'c
+(** Nest the first argument with the first element of the pair given as second
+    argument. *)
+
+val flatten: ('a * 'b) * 'c -> 'a * 'b * 'c
+(** Flatten the pairs into a triplet. *)
+
 (* ************************************************************************* *)
 (** {2 Lists} *)
 (* ************************************************************************* *)