{-| Alternative utilities. For instance, they can be applied with parsing libraries. -} module VectorBuilder.Alternative where import VectorBuilder.Prelude import Data.Vector (Vector) import qualified VectorBuilder.Builder as A import qualified VectorBuilder.Vector as B {-# INLINABLE many #-} many :: Alternative m => m a -> m (Vector a) many m = fmap B.build loop where loop = ((<>) <$> A.singleton <$> m <*> loop) <|> pure mempty