packages feed

iri-0.5: library/Iri/Vector.hs

module Iri.Vector where

import Data.Vector
import Iri.Prelude hiding (length, null)

{-# INLINE intercalate #-}
intercalate :: (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