diff --git a/clangml-transforms/dune b/clangml-transforms/dune
index 9ec6bb5035d63d01854df1b1d7f341f9a78da686..1adf5147c6d24c97194a794111b1409cedc351c0 100644
--- a/clangml-transforms/dune
+++ b/clangml-transforms/dune
@@ -3,4 +3,4 @@
   (public_name clangml-transforms)
   (preprocess (pps refl.ppx))
   (wrapped false)
-  (libraries clangml refl dolog))
+  (libraries clangml refl dolog traverse))
diff --git a/clangml-transforms/for_memcad.ml b/clangml-transforms/for_memcad.ml
index b1f08d3d21898f861fe6b2e4c3c8dbb240ce9969..0d841f04e57240b55bef4cf17f26f572a60ac891 100644
--- a/clangml-transforms/for_memcad.ml
+++ b/clangml-transforms/for_memcad.ml
@@ -167,14 +167,16 @@ let plus_with_warning (a : accu) (b : accu) : accu =
   Free_monoid.plus a b
 
 module Applicative =
-  Refl.Visit.EnvT (struct type t = env end)
-    (Refl.Visit.ReduceT (struct
-      type t = accu
+  Traverse.Applicative.Env (struct type t = env end)
+    (Traverse.Applicative.Pair
+      (Traverse.Applicative.Map)
+      (Traverse.Applicative.Reduce (struct
+        type t = accu
 
-      let zero = Free_monoid.zero
+        let zero = Free_monoid.zero
 
-      let ( + ) = plus_with_warning
-    end) (Refl.Visit.Map))
+        let ( + ) = plus_with_warning
+      end)))
 
 module rec Visitor : Refl.Visit.VisitorS
 with type 'a Applicative.t = 'a Applicative.t = struct
diff --git a/dune-project b/dune-project
index 39ccdc4b71305f4c2a172f09876449b455df19ba..b908bf2f1a3358d7efbb14ebc371666f0ad348d2 100644
--- a/dune-project
+++ b/dune-project
@@ -18,4 +18,5 @@
   (ocaml (and (>= 4.03.0) (< 4.11.0)))
   (dune (>= 2.2.0))
   (clangml (>= 4.1.0))
-  (dolog (>= 4.0.0))))
+  (dolog (>= 4.0.0))
+  (traverse (>= 0.1.0))))