diff --git a/Control/Applicative/Permutation.hs b/Control/Applicative/Permutation.hs
--- a/Control/Applicative/Permutation.hs
+++ b/Control/Applicative/Permutation.hs
@@ -134,7 +134,7 @@
 -- * @'runPerms' ('pure' x) = 'pure' x@
 --
 -- * @'runPerms' (f '<$>' p) = f '<$>' 'runPerms' p@
-runPerms :: Alternative p => Perms p a -> p a 
+runPerms :: Alternative p => Perms p a -> p a
 runPerms = foldChoice pars
   where pars (Branch t p) = flip ($) <$> p <*> runPerms t
 -- NOT: pars (Branch t p) = runPerms t <*> p
@@ -146,15 +146,17 @@
 --
 -- * @'runPermsSep' sep (f '<$>' 'atom' a '<*>' 'atom' b) = (f '<$>' a '<*' sep '<*>' b) '<|>' ('flip' f '<$>' b '<*' sep '<*>' a)@
 --
--- It is particularly useful in constructing permutation persers, where
+-- It is particularly useful in constructing permutation parsers, where
 -- @sep@ might be a parser for a comma or other separator.
-runPermsSep :: Alternative p => p b -> Perms p a -> p a 
-runPermsSep sep = foldChoice pars
-  where pars (Branch t p) = flip ($) <$> p <*> runPermsPref sep t
+runPermsSep :: Alternative p => p b -> Perms p a -> p a
+runPermsSep sep = foldChoice (runBranchSep sep)
 
-runPermsPref :: Alternative p => p b -> Perms p a -> p a 
-runPermsPref sep = foldChoice pars
-  where pars (Branch t p) = flip ($) <$ sep <*> p <*> runPermsPref sep t
+runPermsPref :: Alternative p => p b -> Perms p a -> p a
+runPermsPref sep (Choice d bs) =
+    (sep *> foldr ((<|>) . runBranchSep sep) empty bs) <|> maybe empty pure d
+
+runBranchSep :: Alternative p => p b -> Branch p a -> p a
+runBranchSep sep (Branch t p) = flip ($) <$> p <*> runPermsPref sep t
 
 foldChoice :: Alternative p => (Branch p a -> p a) -> Perms p a -> p a
 foldChoice f (Choice d bs) = foldr ((<|>) . f) (maybe empty pure d) bs
diff --git a/action-permutations.cabal b/action-permutations.cabal
--- a/action-permutations.cabal
+++ b/action-permutations.cabal
@@ -1,5 +1,5 @@
 name:         action-permutations
-version:      0.0.0.0
+version:      0.0.0.1
 license:      BSD3
 license-file: LICENSE
 author:       Ross Paterson <ross@soi.city.ac.uk>
@@ -14,16 +14,13 @@
     permutations of elements.
     This version has a slightly different interface from the paper.
 build-type: Simple
-cabal-version: >= 1.2
+cabal-version: >= 1.6
 
-flag ApplicativeInBase
-  description: Choose the newer base package, including Applicative and other
-    Functor classes.
+source-repository head
+  type: darcs
+  location: http://code.haskell.org/~ross/action-permutations
 
 library
-  if flag(ApplicativeInBase)
-    build-depends: base >= 2
-  else
-    build-depends: base >= 1.0 && < 2, special-functors >=1.0 && <1.1
+  build-depends: base >= 2 && < 5
   exposed-modules: Control.Applicative.Permutation
   extensions: ExistentialQuantification
