module Iri.Vector where import Iri.Prelude hiding (null, length) import Data.Vector {-# INLINE intercalate #-} intercalate :: (Semigroup monoid, Monoid monoid) => (element -> monoid) -> monoid -> Vector element -> monoid intercalate project separator vector = if null vector then mempty else project (unsafeIndex vector 0) <> iterate 1 where vectorLength = length vector iterate !index = if index < vectorLength then separator <> project (unsafeIndex vector index) <> iterate (succ index) else mempty