diff --git a/Data/Syntax/Combinator.hs b/Data/Syntax/Combinator.hs
new file mode 100644
--- /dev/null
+++ b/Data/Syntax/Combinator.hs
@@ -0,0 +1,25 @@
+{- |
+Module      :  Data.Syntax.Combinator
+Description :  Combinators that work with any sequence type.
+Copyright   :  (c) Paweł Nowak
+License     :  MIT
+
+Maintainer  :  Paweł Nowak <pawel834@gmail.com>
+Stability   :  experimental
+
+Combinators that work with any sequence type.
+-}
+module Data.Syntax.Combinator where
+
+import Control.Lens.Cons
+import Control.Lens.Empty
+import Data.SemiIsoFunctor
+
+-- | Zero or more occurences of v separated by s.
+sepBy :: SemiIsoAlternative f => f a -> f () -> f [a]
+sepBy v s =  sepBy1 v s 
+         /|/ sipure _Empty
+
+-- | One or more occurences of v separated by s.
+sepBy1 :: SemiIsoAlternative f => f a -> f () -> f [a]
+sepBy1 v s = _Cons /$/ v /*/ (s */ sepBy1 v s /|/ sipure _Empty)
diff --git a/syntax.cabal b/syntax.cabal
--- a/syntax.cabal
+++ b/syntax.cabal
@@ -1,5 +1,5 @@
 name:                syntax
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Abstract syntax descriptions for parsing and pretty-printing.
 description:         Write single syntax description, get both parser and pretty-printer.
                      .
@@ -24,5 +24,6 @@
 library
   exposed-modules:     Data.Syntax
                        Data.Syntax.Char
+                       Data.Syntax.Combinator
   build-depends:       base >= 4 && < 5, mono-traversable, lens, semi-iso
   default-language:    Haskell2010
