module VectorExtras.Generic
  ( module Basics,
    fromFoldable,
  )
where

import Data.Vector.Generic hiding (foldl')
import qualified VectorExtras.Accumulator as VAcc
import VectorExtras.Basics.Generic as Basics
import VectorExtras.Prelude

fromFoldable :: (Foldable f, Vector v a) => f a -> v a
fromFoldable :: f a -> v a
fromFoldable =
  Accumulator a -> v a
forall (v :: * -> *) a. Vector v a => Accumulator a -> v a
VAcc.toVector (Accumulator a -> v a) -> (f a -> Accumulator a) -> f a -> v a
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Accumulator a -> a -> Accumulator a)
-> Accumulator a -> f a -> Accumulator a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' ((a -> Accumulator a -> Accumulator a)
-> Accumulator a -> a -> Accumulator a
forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> Accumulator a -> Accumulator a
forall a. a -> Accumulator a -> Accumulator a
VAcc.add) Accumulator a
forall a. Accumulator a
VAcc.init