diff --git a/toolz/functoolz.py b/toolz/functoolz.py
index 2c75d3a4..9cd865ab 100644
--- a/toolz/functoolz.py
+++ b/toolz/functoolz.py
@@ -495,6 +495,10 @@ def __getstate__(self):
     def __setstate__(self, state):
         self.first, self.funcs = state
 
+    def __iter__(self):
+        for f in reversed(self.funcs): yield f
+        yield self.first
+
     @instanceproperty(classval=__doc__)
     def __doc__(self):
         def composed_doc(*fs):
@@ -509,7 +513,7 @@ def composed_doc(*fs):
         try:
             return (
                 'lambda *args, **kwargs: ' +
-                composed_doc(*reversed((self.first,) + self.funcs))
+                composed_doc(*self)
             )
         except AttributeError:
             # One of our callables does not have a `__name__`, whatever.
@@ -519,14 +523,14 @@ def composed_doc(*fs):
     def __name__(self):
         try:
             return '_of_'.join(
-                (f.__name__ for f in reversed((self.first,) + self.funcs))
+                (f.__name__ for f in self)
             )
         except AttributeError:
             return type(self).__name__
 
     def __repr__(self):
         return '{.__class__.__name__}{!r}'.format(
-            self, tuple(reversed((self.first, ) + self.funcs)))
+            self, tuple(self))
 
     def __eq__(self, other):
         if isinstance(other, Compose):