diff --git a/examples/Arithmetic.hs b/examples/Arithmetic.hs
--- a/examples/Arithmetic.hs
+++ b/examples/Arithmetic.hs
@@ -70,11 +70,11 @@
 instance Rank2.DistributiveTraversable (Arithmetic e)
 
 instance Rank2.Distributive (Arithmetic e) where
-   distributeWith w f = Arithmetic{expr= w (expr <$> f),
-                                   sum= w (sum <$> f),
-                                   product= w (product <$> f),
-                                   factor= w (factor <$> f),
-                                   primary= w (primary <$> f)}
+   cotraverse w f = Arithmetic{expr= w (expr <$> f),
+                               sum= w (sum <$> f),
+                               product= w (product <$> f),
+                               factor= w (factor <$> f),
+                               primary= w (primary <$> f)}
 
 instance Rank2.Foldable (Arithmetic e) where
    foldMap f a = f (expr a) <> f (sum a) <> f (product a) <> f (factor a) <> f (primary a)
diff --git a/examples/Combined.hs b/examples/Combined.hs
--- a/examples/Combined.hs
+++ b/examples/Combined.hs
@@ -159,14 +159,14 @@
                               comparisonGrammar= Rank2.distributeM (comparisonGrammar <$> f),
                               conditionalGrammar= Rank2.distributeM (conditionalGrammar <$> f),
                               lambdaGrammar= Rank2.distributeM (lambdaGrammar <$> f)}
-   distributeWith w f = Expression{expr= w (expr <$> f),
-                                   term= w (term <$> f),
-                                   primary= w (primary <$> f),
-                                   arithmeticGrammar= Rank2.distributeWith w (arithmeticGrammar <$> f),
-                                   booleanGrammar= Rank2.distributeWith w (booleanGrammar <$> f),
-                                   comparisonGrammar= Rank2.distributeWith w (comparisonGrammar <$> f),
-                                   conditionalGrammar= Rank2.distributeWith w (conditionalGrammar <$> f),
-                                   lambdaGrammar= Rank2.distributeWith w (lambdaGrammar <$> f)}
+   cotraverse w f = Expression{expr= w (expr <$> f),
+                               term= w (term <$> f),
+                               primary= w (primary <$> f),
+                               arithmeticGrammar= Rank2.cotraverse w (arithmeticGrammar <$> f),
+                               booleanGrammar= Rank2.cotraverse w (booleanGrammar <$> f),
+                               comparisonGrammar= Rank2.cotraverse w (comparisonGrammar <$> f),
+                               conditionalGrammar= Rank2.cotraverse w (conditionalGrammar <$> f),
+                               lambdaGrammar= Rank2.cotraverse w (lambdaGrammar <$> f)}
 
 instance Rank2.Foldable Expression where
    foldMap f g = f (expr g) <> f (term g) <> f (primary g)
diff --git a/examples/Comparisons.hs b/examples/Comparisons.hs
--- a/examples/Comparisons.hs
+++ b/examples/Comparisons.hs
@@ -51,8 +51,8 @@
 instance Rank2.DistributiveTraversable (Comparisons c e)
 
 instance Rank2.Distributive (Comparisons c e) where
-   distributeWith w f = Comparisons{test= w (test <$> f),
-                                    term= w (term <$> f)}
+   cotraverse w f = Comparisons{test= w (test <$> f),
+                                term= w (term <$> f)}
 
 instance Rank2.Foldable (Comparisons c e) where
    foldMap f g = f (test g) <> f (term g)
diff --git a/grammatical-parsers.cabal b/grammatical-parsers.cabal
--- a/grammatical-parsers.cabal
+++ b/grammatical-parsers.cabal
@@ -1,5 +1,5 @@
 name:                grammatical-parsers
-version:             0.2.1
+version:             0.2.2
 synopsis:            parsers that can combine into grammars
 description:
   /Gram/matical-/pa/rsers, or Grampa for short, is a library of parser types whose values are meant to be assigned
@@ -39,7 +39,7 @@
                        transformers >= 0.5 && < 0.6,
                        monoid-subclasses >=0.4 && <0.5,
                        parsers < 0.13,
-                       rank2classes < 1.0
+                       rank2classes == 1.0.*
   -- hs-source-dirs:      
   default-language:    Haskell2010
 
@@ -50,7 +50,7 @@
   default-language:    Haskell2010
   build-depends:       base >=4.7 && <5, containers >= 0.5.7.0 && < 0.6,
                        parsers < 0.13,
-                       rank2classes < 1.0, grammatical-parsers,
+                       rank2classes == 1.0.*, grammatical-parsers,
                        monoid-subclasses >=0.4 && <0.5
 
 test-suite           quicktests
@@ -58,7 +58,7 @@
   hs-source-dirs:    test, examples
   x-uses-tf:         true
   build-depends:     base >=4.7 && < 5, monoid-subclasses < 0.5, parsers < 0.13,
-                     rank2classes < 1.0, grammatical-parsers,
+                     rank2classes == 1.0.*, grammatical-parsers,
                      QuickCheck >= 2 && < 3, checkers >= 0.4.6 && < 0.5, testing-feat < 0.5,
                      tasty >= 0.7, tasty-quickcheck >= 0.7
   main-is:           Test.hs
@@ -77,7 +77,7 @@
   type:              exitcode-stdio-1.0
   hs-source-dirs:    test, examples
   ghc-options:       -O2 -Wall -rtsopts -main-is Benchmark.main
-  Build-Depends:     base >=4.7 && < 5, rank2classes < 1.0, grammatical-parsers, monoid-subclasses >=0.4 && <0.5,
+  Build-Depends:     base >=4.7 && < 5, rank2classes == 1.0.*, grammatical-parsers, monoid-subclasses >=0.4 && <0.5,
                      criterion >= 1.0, deepseq >= 1.1, containers >= 0.5.7.0 && < 0.6, text >= 1.1
   main-is:           Benchmark.hs
   other-modules:     Arithmetic
diff --git a/src/Text/Grampa/Class.hs b/src/Text/Grampa/Class.hs
--- a/src/Text/Grampa/Class.hs
+++ b/src/Text/Grampa/Class.hs
@@ -50,7 +50,7 @@
    -- | Mark a parser that relies on primitive recursion to prevent an infinite loop in 'fixGrammar'.
    recursive :: m g s a -> m g s a
 
-   selfReferring = Rank2.distributeWith nonTerminal id
+   selfReferring = Rank2.cotraverse nonTerminal id
    fixGrammar = ($ selfReferring)
    recursive = id
 
diff --git a/src/Text/Grampa/ContextFree/LeftRecursive.hs b/src/Text/Grampa/ContextFree/LeftRecursive.hs
--- a/src/Text/Grampa/ContextFree/LeftRecursive.hs
+++ b/src/Text/Grampa/ContextFree/LeftRecursive.hs
@@ -70,7 +70,7 @@
 --   mempty = Union (Rank2.pure $ Const False)
 
 instance (Rank2.Apply g, Rank2.Distributive g) => Monoid (Union g) where
-   mempty = Union (Rank2.distributeWith (Const . getConst) (Const False))
+   mempty = Union (Rank2.cotraverse (Const . getConst) (Const False))
    mappend (Union g1) (Union g2) = Union (Rank2.liftA2 union g1 g2)
 
 general, general' :: Alternative (p g s) => Fixed p g s a -> Fixed p g s a
