diff --git a/src/Yaya/Containers/Pattern/IntMap.hs b/src/Yaya/Containers/Pattern/IntMap.hs
--- a/src/Yaya/Containers/Pattern/IntMap.hs
+++ b/src/Yaya/Containers/Pattern/IntMap.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE Safe #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
@@ -6,26 +7,21 @@
   )
 where
 
+import "base" Control.Applicative (Alternative ((<|>)), Applicative ((<*>)), (*>))
 import "base" Control.Category (Category ((.)))
 import "base" Data.Bool (Bool (False, True), (&&))
 import "base" Data.Eq (Eq ((==)))
 import "base" Data.Foldable (Foldable)
 import "base" Data.Function (($))
-import "base" Data.Functor (Functor (fmap))
-import "base" Data.Functor.Classes
-  ( Eq1 (liftEq),
-    Eq2 (liftEq2),
-    Ord1 (liftCompare),
-    Ord2 (liftCompare2),
-    Show1 (liftShowsPrec),
-    Show2 (liftShowsPrec2),
-  )
+import "base" Data.Functor (Functor (fmap), (<$), (<$>))
 import "base" Data.Ord (Ord (compare, (<=)), Ordering (EQ, GT, LT))
 import "base" Data.Semigroup ((<>))
 import "base" Data.Traversable (Traversable)
 import qualified "base" Data.Tuple as Tuple
 import "base" GHC.Generics (Generic, Generic1)
-import "base" Text.Show (Show (showList, showsPrec), showParen, showString)
+import "base" GHC.Read (Read (readListPrec, readPrec), expectP, parens)
+import "base" Text.ParserCombinators.ReadPrec (prec, step)
+import qualified "base" Text.Read.Lex as Lex
 import qualified "containers" Data.IntMap.Internal as IntMap
 import "yaya" Yaya.Fold
   ( Projectable (project),
@@ -33,6 +29,31 @@
     Steppable (embed),
   )
 import "base" Prelude (Num ((+)))
+#if MIN_VERSION_base(4, 18, 0)
+import "base" Data.Functor.Classes
+  ( Eq1,
+    Eq2 (liftEq2),
+    Ord2 (liftCompare2),
+    Ord1,
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1,
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show (Show (showsPrec), showParen, showString)
+#else
+import "base" Data.Functor.Classes
+  ( Eq1 (liftEq),
+    Eq2 (liftEq2),
+    Ord1 (liftCompare),
+    Ord2 (liftCompare2),
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1 (liftShowsPrec),
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show (Show (showList, showsPrec), showParen, showString)
+#endif
 
 data IntMapF a r
   = NilF
@@ -42,6 +63,8 @@
     ( Eq,
       Ord,
       Generic,
+      -- | @since 0.1.2.0
+      Read,
       Show,
       Foldable,
       Functor,
@@ -62,10 +85,12 @@
   embed (TipF key a) = IntMap.Tip key a
   embed (BinF prefix mask l r) = IntMap.Bin prefix mask l r
 
+#if MIN_VERSION_base(4, 18, 0)
+instance (Eq a) => Eq1 (IntMapF a)
+#else
 instance (Eq a) => Eq1 (IntMapF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftEq = liftEq2 (==)
+#endif
 
 instance Eq2 IntMapF where
   liftEq2 f g = Tuple.curry $ \case
@@ -75,10 +100,12 @@
       prefix == prefix' && mask == mask' && g l l' && g r r'
     (_, _) -> False
 
+#if MIN_VERSION_base(4, 18, 0)
+instance (Ord a) => Ord1 (IntMapF a)
+#else
 instance (Ord a) => Ord1 (IntMapF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftCompare = liftCompare2 compare
+#endif
 
 instance Ord2 IntMapF where
   liftCompare2 f g = Tuple.curry $ \case
@@ -91,25 +118,48 @@
       compare prefix prefix' <> compare mask mask' <> g l l' <> g r r'
     (BinF {}, _) -> GT
 
+-- | @since 0.1.2.0
+instance (Read a) => Read1 (IntMapF a) where
+  liftReadPrec = liftReadPrec2 readPrec readListPrec
+
+-- | @since 0.1.2.0
+instance Read2 IntMapF where
+  liftReadPrec2 readPrecA _ readPrecR _ =
+    let appPrec = 10
+     in parens . prec appPrec $
+          NilF
+            <$ expectP (Lex.Ident "NilF")
+            <|> expectP (Lex.Ident "TipF")
+              *> (TipF <$> step readPrec <*> step readPrecA)
+            <|> expectP (Lex.Ident "BinF")
+              *> ( BinF
+                     <$> step readPrec
+                     <*> step readPrec
+                     <*> step readPrecR
+                     <*> step readPrecR
+                 )
+
+#if MIN_VERSION_base(4, 18, 0)
+instance (Show a) => Show1 (IntMapF a)
+#else
 instance (Show a) => Show1 (IntMapF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftShowsPrec = liftShowsPrec2 showsPrec showList
+#endif
 
 instance Show2 IntMapF where
-  liftShowsPrec2 showsPrecA _showListA showsPrecR _showListR prec =
+  liftShowsPrec2 showsPrecA _ showsPrecR _ p =
     let appPrec = 10
         nextPrec = appPrec + 1
      in \case
           NilF -> showString "NilF"
           TipF key a ->
-            showParen (nextPrec <= prec) $
-              showString "BipF "
+            showParen (nextPrec <= p) $
+              showString "TipF "
                 . showsPrec nextPrec key
                 . showString " "
                 . showsPrecA nextPrec a
           BinF prefix mask l r ->
-            showParen (nextPrec <= prec) $
+            showParen (nextPrec <= p) $
               showString "BinF "
                 . showsPrec nextPrec prefix
                 . showString " "
diff --git a/src/Yaya/Containers/Pattern/IntSet.hs b/src/Yaya/Containers/Pattern/IntSet.hs
--- a/src/Yaya/Containers/Pattern/IntSet.hs
+++ b/src/Yaya/Containers/Pattern/IntSet.hs
@@ -6,15 +6,21 @@
   )
 where
 
+import "base" Control.Applicative
+  ( Alternative ((<|>)),
+    Applicative ((<*>)),
+    (*>),
+  )
 import "base" Control.Category (Category ((.)))
 import "base" Data.Bool (Bool (False, True), (&&))
 import "base" Data.Eq (Eq ((==)))
 import "base" Data.Foldable (Foldable)
 import "base" Data.Function (($))
-import "base" Data.Functor (Functor (fmap))
+import "base" Data.Functor (Functor (fmap), (<$), (<$>))
 import "base" Data.Functor.Classes
   ( Eq1 (liftEq),
     Ord1 (liftCompare),
+    Read1 (liftReadPrec),
     Show1 (liftShowsPrec),
   )
 import "base" Data.Ord (Ord (compare, (<=)), Ordering (EQ, GT, LT))
@@ -22,6 +28,9 @@
 import "base" Data.Traversable (Traversable)
 import qualified "base" Data.Tuple as Tuple
 import "base" GHC.Generics (Generic, Generic1)
+import "base" GHC.Read (Read (readPrec), expectP, parens)
+import "base" Text.ParserCombinators.ReadPrec (prec, step)
+import qualified "base" Text.Read.Lex as Lex
 import "base" Text.Show (Show (showsPrec), showParen, showString)
 import qualified "containers" Data.IntSet.Internal as IntSet
 import "yaya" Yaya.Fold
@@ -39,6 +48,8 @@
     ( Eq,
       Ord,
       Generic,
+      -- | @since 0.1.2.0
+      Read,
       Show,
       Foldable,
       Functor,
@@ -79,20 +90,37 @@
       compare prefix prefix' <> compare mask mask' <> f l l' <> f r r'
     (BinF {}, _) -> GT
 
+-- | @since 0.1.2.0
+instance Read1 IntSetF where
+  liftReadPrec readPrecR _ =
+    let appPrec = 10
+     in parens . prec appPrec $
+          NilF
+            <$ expectP (Lex.Ident "NilF")
+            <|> expectP (Lex.Ident "TipF")
+              *> (TipF <$> step readPrec <*> step readPrec)
+            <|> expectP (Lex.Ident "BinF")
+              *> ( BinF
+                     <$> step readPrec
+                     <*> step readPrec
+                     <*> step readPrecR
+                     <*> step readPrecR
+                 )
+
 instance Show1 IntSetF where
-  liftShowsPrec showsPrecR _showListR prec =
+  liftShowsPrec showsPrecR _ p =
     let appPrec = 10
         nextPrec = appPrec + 1
      in \case
           NilF -> showString "NilF"
           TipF prefix bm ->
-            showParen (nextPrec <= prec) $
+            showParen (nextPrec <= p) $
               showString "TipF "
                 . showsPrec nextPrec prefix
                 . showString " "
                 . showsPrec nextPrec bm
           BinF prefix mask l r ->
-            showParen (nextPrec <= prec) $
+            showParen (nextPrec <= p) $
               showString "BinF "
                 . showsPrec nextPrec prefix
                 . showString " "
diff --git a/src/Yaya/Containers/Pattern/Map.hs b/src/Yaya/Containers/Pattern/Map.hs
--- a/src/Yaya/Containers/Pattern/Map.hs
+++ b/src/Yaya/Containers/Pattern/Map.hs
@@ -1,31 +1,46 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE Safe #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
 module Yaya.Containers.Pattern.Map
   ( MapF (BinF, TipF),
+    -- | @since 0.1.2.0
+    eqMapF,
+    -- | @since 0.1.2.0
+    compareMapF,
+    -- | @since 0.1.2.0
+    readMapFPrec,
+    -- | @since 0.1.2.0
+    showsMapFPrec,
   )
 where
 
+import "base" Control.Applicative
+  ( Alternative ((<|>)),
+    Applicative ((<*>)),
+    (*>),
+  )
 import "base" Control.Category (Category ((.)))
 import "base" Data.Bool (Bool (False, True), (&&))
 import "base" Data.Eq (Eq ((==)))
 import "base" Data.Foldable (Foldable)
 import "base" Data.Function (($))
-import "base" Data.Functor (Functor (fmap))
-import "base" Data.Functor.Classes
-  ( Eq1 (liftEq),
-    Eq2 (liftEq2),
-    Ord1 (liftCompare),
-    Ord2 (liftCompare2),
-    Show1 (liftShowsPrec),
-    Show2 (liftShowsPrec2),
-  )
+import "base" Data.Functor (Functor (fmap), (<$), (<$>))
+import "base" Data.Int (Int)
 import "base" Data.Ord (Ord (compare, (<=)), Ordering (EQ, GT, LT))
 import "base" Data.Semigroup ((<>))
 import "base" Data.Traversable (Traversable)
 import qualified "base" Data.Tuple as Tuple
 import "base" GHC.Generics (Generic, Generic1)
-import "base" Text.Show (Show (showList, showsPrec), showParen, showString)
+import "base" GHC.Read (expectP)
+import "base" Text.Read
+  ( Read (readListPrec, readPrec),
+    ReadPrec,
+    parens,
+    prec,
+    step,
+  )
+import qualified "base" Text.Read.Lex as Lex
 import qualified "containers" Data.Map.Internal as Map
 import "yaya" Yaya.Fold
   ( Projectable (project),
@@ -33,12 +48,44 @@
     Steppable (embed),
   )
 import "base" Prelude (Num ((+)))
+#if MIN_VERSION_base(4, 18, 0)
+import "base" Data.Functor.Classes
+  ( Eq1,
+    Eq2 (liftEq2),
+    Ord1,
+    Ord2 (liftCompare2),
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1,
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show (Show (showsPrec), ShowS, showParen, showString)
+#else
+import "base" Data.Functor.Classes
+  ( Eq1 (liftEq),
+    Eq2 (liftEq2),
+    Ord1 (liftCompare),
+    Ord2 (liftCompare2),
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1 (liftShowsPrec),
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show
+  ( Show (showList, showsPrec),
+    ShowS,
+    showParen,
+    showString,
+  )
+#endif
 
 data MapF k v r = TipF | BinF Map.Size k ~v r r
   deriving stock
     ( Eq,
       Ord,
       Generic,
+      -- | @since 0.1.2.0
+      Read,
       Show,
       Foldable,
       Functor,
@@ -57,51 +104,113 @@
   embed TipF = Map.Tip
   embed (BinF size k v l r) = Map.Bin size k v l r
 
+eqMapF ::
+  (k -> k' -> Bool) ->
+  (v -> v' -> Bool) ->
+  (r -> r' -> Bool) ->
+  MapF k v r ->
+  MapF k' v' r' ->
+  Bool
+eqMapF eqK eqV eqR = Tuple.curry $ \case
+  (TipF, TipF) -> True
+  (BinF size k v l r, BinF size' k' v' l' r') ->
+    size == size' && eqK k k' && eqV v v' && eqR l l' && eqR r r'
+  (_, _) -> False
+
+compareMapF ::
+  (k -> k' -> Ordering) ->
+  (v -> v' -> Ordering) ->
+  (r -> r' -> Ordering) ->
+  MapF k v r ->
+  MapF k' v' r' ->
+  Ordering
+compareMapF compareK compareV compareR = Tuple.curry $ \case
+  (TipF, TipF) -> EQ
+  (TipF, BinF {}) -> LT
+  (BinF {}, TipF) -> GT
+  (BinF size k v l r, BinF size' k' v' l' r') ->
+    compare size size'
+      <> compareK k k'
+      <> compareV v v'
+      <> compareR l l'
+      <> compareR r r'
+
+readMapFPrec :: ReadPrec k -> ReadPrec v -> ReadPrec r -> ReadPrec (MapF k v r)
+readMapFPrec readPrecK readPrecV readPrecR =
+  let appPrec = 10
+   in parens . prec appPrec $
+        TipF
+          <$ expectP (Lex.Ident "TipF")
+          <|> expectP (Lex.Ident "BinF")
+            *> ( BinF
+                   <$> step readPrec
+                   <*> step readPrecK
+                   <*> step readPrecV
+                   <*> step readPrecR
+                   <*> step readPrecR
+               )
+
+showsMapFPrec ::
+  (Int -> k -> ShowS) ->
+  (Int -> v -> ShowS) ->
+  (Int -> r -> ShowS) ->
+  Int ->
+  MapF k v r ->
+  ShowS
+showsMapFPrec showsPrecK showsPrecV showsPrecR p =
+  let appPrec = 10
+      nextPrec = appPrec + 1
+   in \case
+        TipF -> showString "TipF"
+        BinF size k v l r ->
+          showParen (nextPrec <= p) $
+            showString "BinF "
+              . showsPrec nextPrec size
+              . showString " "
+              . showsPrecK nextPrec k
+              . showString " "
+              . showsPrecV nextPrec v
+              . showString " "
+              . showsPrecR nextPrec l
+              . showString " "
+              . showsPrecR nextPrec r
+
+#if MIN_VERSION_base(4, 18, 0)
+instance (Eq k, Eq v) => Eq1 (MapF k v)
+#else
 instance (Eq k, Eq v) => Eq1 (MapF k v) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftEq = liftEq2 (==)
+#endif
 
 instance (Eq k) => Eq2 (MapF k) where
-  liftEq2 f g = Tuple.curry $ \case
-    (TipF, TipF) -> True
-    (BinF size k v l r, BinF size' k' v' l' r') ->
-      size == size' && k == k' && f v v' && g l l' && g r r'
-    (_, _) -> False
+  liftEq2 = eqMapF (==)
 
+#if MIN_VERSION_base(4, 18, 0)
+instance (Ord k, Ord v) => Ord1 (MapF k v)
+#else
 instance (Ord k, Ord v) => Ord1 (MapF k v) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftCompare = liftCompare2 compare
+#endif
 
 instance (Ord k) => Ord2 (MapF k) where
-  liftCompare2 f g = Tuple.curry $ \case
-    (TipF, TipF) -> EQ
-    (TipF, BinF {}) -> LT
-    (BinF {}, TipF) -> GT
-    (BinF size k v l r, BinF size' k' v' l' r') ->
-      compare size size' <> compare k k' <> f v v' <> g l l' <> g r r'
+  liftCompare2 = compareMapF compare
 
+-- | @since 0.1.2.0
+instance (Read k, Read v) => Read1 (MapF k v) where
+  liftReadPrec = liftReadPrec2 readPrec readListPrec
+
+-- | @since 0.1.2.0
+instance (Read k) => Read2 (MapF k) where
+  liftReadPrec2 readPrecV _ readPrecR _ =
+    readMapFPrec readPrec readPrecV readPrecR
+
+#if MIN_VERSION_base(4, 18, 0)
+instance (Show k, Show v) => Show1 (MapF k v)
+#else
 instance (Show k, Show v) => Show1 (MapF k v) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftShowsPrec = liftShowsPrec2 showsPrec showList
+#endif
 
 instance (Show k) => Show2 (MapF k) where
-  liftShowsPrec2 showsPrecV _showListV showsPrecR _showListR prec =
-    let appPrec = 10
-        nextPrec = appPrec + 1
-     in \case
-          TipF -> showString "TipF"
-          BinF size k v l r ->
-            showParen (nextPrec <= prec) $
-              showString "BinF "
-                . showsPrec nextPrec size
-                . showString " "
-                . showsPrec nextPrec k
-                . showString " "
-                . showsPrecV nextPrec v
-                . showString " "
-                . showsPrecR nextPrec l
-                . showString " "
-                . showsPrecR nextPrec r
+  liftShowsPrec2 showsPrecV _ showsPrecR _ =
+    showsMapFPrec showsPrec showsPrecV showsPrecR
diff --git a/src/Yaya/Containers/Pattern/Set.hs b/src/Yaya/Containers/Pattern/Set.hs
--- a/src/Yaya/Containers/Pattern/Set.hs
+++ b/src/Yaya/Containers/Pattern/Set.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE Safe #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
@@ -6,26 +7,25 @@
   )
 where
 
+import "base" Control.Applicative
+  ( Alternative ((<|>)),
+    Applicative ((<*>)),
+    (*>),
+  )
 import "base" Control.Category (Category ((.)))
 import "base" Data.Bool (Bool (False, True), (&&))
 import "base" Data.Eq (Eq ((==)))
 import "base" Data.Foldable (Foldable)
 import "base" Data.Function (($))
-import "base" Data.Functor (Functor (fmap))
-import "base" Data.Functor.Classes
-  ( Eq1 (liftEq),
-    Eq2 (liftEq2),
-    Ord1 (liftCompare),
-    Ord2 (liftCompare2),
-    Show1 (liftShowsPrec),
-    Show2 (liftShowsPrec2),
-  )
+import "base" Data.Functor (Functor (fmap), (<$), (<$>))
 import "base" Data.Ord (Ord (compare, (<=)), Ordering (EQ, GT, LT))
 import "base" Data.Semigroup ((<>))
 import "base" Data.Traversable (Traversable)
 import qualified "base" Data.Tuple as Tuple
 import "base" GHC.Generics (Generic, Generic1)
-import "base" Text.Show (Show (showList, showsPrec), showParen, showString)
+import "base" GHC.Read (Read (readListPrec, readPrec), expectP, parens)
+import "base" Text.ParserCombinators.ReadPrec (prec, step)
+import qualified "base" Text.Read.Lex as Lex
 import qualified "containers" Data.Set.Internal as Set
 import "yaya" Yaya.Fold
   ( Projectable (project),
@@ -33,12 +33,39 @@
     Steppable (embed),
   )
 import "base" Prelude (Num ((+)))
+#if MIN_VERSION_base(4, 18, 0)
+import "base" Data.Functor.Classes
+  ( Eq1,
+    Eq2 (liftEq2),
+    Ord1,
+    Ord2 (liftCompare2),
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1,
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show (Show (showsPrec), showParen, showString)
+#else
+import "base" Data.Functor.Classes
+  ( Eq1 (liftEq),
+    Eq2 (liftEq2),
+    Ord1 (liftCompare),
+    Ord2 (liftCompare2),
+    Read1 (liftReadPrec),
+    Read2 (liftReadPrec2),
+    Show1 (liftShowsPrec),
+    Show2 (liftShowsPrec2),
+  )
+import "base" Text.Show (Show (showList, showsPrec), showParen, showString)
+#endif
 
 data SetF a r = TipF | BinF Set.Size a r r
   deriving stock
     ( Eq,
       Ord,
       Generic,
+      -- | @since 0.1.2.0
+      Read,
       Show,
       Foldable,
       Functor,
@@ -57,10 +84,12 @@
   embed TipF = Set.Tip
   embed (BinF size a l r) = Set.Bin size a l r
 
+#if MIN_VERSION_base(4, 18, 0)
+instance (Eq a) => Eq1 (SetF a)
+#else
 instance (Eq a) => Eq1 (SetF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftEq = liftEq2 (==)
+#endif
 
 instance Eq2 SetF where
   liftEq2 f g = Tuple.curry $ \case
@@ -69,10 +98,12 @@
       size == size' && f a a' && g l l' && g r r'
     (_, _) -> False
 
+#if MIN_VERSION_base(4, 18, 0)
+instance (Ord a) => Ord1 (SetF a)
+#else
 instance (Ord a) => Ord1 (SetF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftCompare = liftCompare2 compare
+#endif
 
 instance Ord2 SetF where
   liftCompare2 f g = Tuple.curry $ \case
@@ -82,19 +113,40 @@
     (BinF size a l r, BinF size' a' l' r') ->
       compare size size' <> f a a' <> g l l' <> g r r'
 
+-- | @since 0.1.2.0
+instance (Read a) => Read1 (SetF a) where
+  liftReadPrec = liftReadPrec2 readPrec readListPrec
+
+-- | @since 0.1.2.0
+instance Read2 SetF where
+  liftReadPrec2 readPrecA _ readPrecR _ =
+    let appPrec = 10
+     in parens . prec appPrec $
+          TipF
+            <$ expectP (Lex.Ident "TipF")
+            <|> expectP (Lex.Ident "BinF")
+              *> ( BinF
+                     <$> step readPrec
+                     <*> step readPrecA
+                     <*> step readPrecR
+                     <*> step readPrecR
+                 )
+
+#if MIN_VERSION_base(4, 18, 0)
+instance (Show a) => Show1 (SetF a)
+#else
 instance (Show a) => Show1 (SetF a) where
-  -- TODO: Remove this once base-4.18 is the oldest supported verson, as it’s
-  --       the default impl.
   liftShowsPrec = liftShowsPrec2 showsPrec showList
+#endif
 
 instance Show2 SetF where
-  liftShowsPrec2 showsPrecA _showListA showsPrecR _showListR prec =
+  liftShowsPrec2 showsPrecA _ showsPrecR _ p =
     let appPrec = 10
         nextPrec = appPrec + 1
      in \case
           TipF -> showString "TipF"
           BinF size a l r ->
-            showParen (nextPrec <= prec) $
+            showParen (nextPrec <= p) $
               showString "BinF "
                 . showsPrec nextPrec size
                 . showString " "
diff --git a/yaya-containers.cabal b/yaya-containers.cabal
--- a/yaya-containers.cabal
+++ b/yaya-containers.cabal
@@ -1,7 +1,7 @@
 cabal-version:  3.0
 
 name:        yaya-containers
-version:     0.1.1.0
+version:     0.1.2.0
 synopsis:    Pattern functors and instances for types in the containers package.
 author:      Greg Pfeil <greg@technomadic.org>
 maintainer:  Greg Pfeil <greg@technomadic.org>
@@ -152,7 +152,7 @@
     Yaya.Containers.Pattern.Set
   build-depends:
     containers ^>= {0.6.0},
-    yaya ^>= {0.6.0},
+    yaya ^>= {0.5.1, 0.6.0},
   ghc-options:
     -trust adjunctions
     -trust array
