packages feed

saturn-0.2.0.0: source/libraries/unstable/Saturn/Unstable/Extra/Parsec.hs

module Saturn.Unstable.Extra.Parsec where

import qualified Data.List.NonEmpty as NonEmpty
import qualified Text.Parsec as Parsec

either ::
  Parsec.ParsecT s u m a ->
  Parsec.ParsecT s u m b ->
  Parsec.ParsecT s u m (Either a b)
either l r = fmap Left l Parsec.<|> fmap Right r

sepByNE ::
  Parsec.ParsecT s u m a ->
  Parsec.ParsecT s u m sep ->
  Parsec.ParsecT s u m (NonEmpty.NonEmpty a)
sepByNE p s = (NonEmpty.:|) <$> p <*> Parsec.many (s *> p)