{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Data.Vector.HFixed (
HVector(..)
, tupleSize
, HVectorF(..)
, tupleSizeF
, ContVec
, ContVecF(..)
, asCVec
, asCVecF
, mk0
, mk1
, mk2
, mk3
, mk4
, mk5
, unfoldr
, replicate
, replicateM
, convert
, head
, tail
, cons
, concat
, ValueAt
, Index
, index
, set
, element
, elementCh
, tyLookup
, tyLookupF
, foldr
, foldl
, foldMap
, mapM_
, zipWith
, zipFold
, eq
, compare
, rnf
, mk0F
, mk1F
, mk2F
, mk3F
, mk4F
, mk5F
, unfoldrF
, replicateF
, replicateNatF
, wrap
, unwrap
, monomorphize
, monomorphizeF
, map
, mapNat
, sequence
, sequence_
, sequenceF
, distribute
, distributeF
, foldrF
, foldlF
, foldMapF
, foldrNatF
, foldlNatF
, foldMapNatF
, zipWithF
, zipWithNatF
, zipFoldF
, Arity
, ArityC
, Proxy(..)
) where
import Control.Applicative (Applicative(..),(<$>))
import qualified Control.DeepSeq as NF
import Data.Coerce (coerce)
import Data.Functor.Compose (Compose(..))
import Data.Functor.Identity (Identity(..))
import Data.Monoid (Monoid,All(..))
import Prelude ( Functor(..),Eq(..),Ord,Bool,Ordering
, id,(.),($),seq)
import qualified Prelude
import Data.Vector.HFixed.Class hiding (cons,consF)
import Data.Vector.Fixed.Cont (Peano)
import qualified Data.Vector.Fixed as F
import qualified Data.Vector.HFixed.Cont as C
asCVec :: ContVec xs -> ContVec xs
asCVec :: ContVec xs -> ContVec xs
asCVec = ContVec xs -> ContVec xs
forall a. a -> a
id
asCVecF :: ContVecF f xs -> ContVecF f xs
asCVecF :: ContVecF f xs -> ContVecF f xs
asCVecF = ContVecF f xs -> ContVecF f xs
forall a. a -> a
id
convert :: (HVector v, HVector w, Elems v ~ Elems w)
=> v -> w
{-# INLINE convert #-}
convert :: v -> w
convert v
v = v -> Fun (Elems v) w -> w
forall v a. HVector v => v -> Fun (Elems v) a -> a
inspect v
v Fun (Elems v) w
forall v. HVector v => Fun (Elems v) v
construct
tail :: (HVector v, HVector w, (a : Elems w) ~ Elems v)
=> v -> w
{-# INLINE tail #-}
tail :: v -> w
tail = ContVec (Elems w) -> w
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (Elems w) -> w) -> (v -> ContVec (Elems w)) -> v -> w
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContVec (a : Elems w) -> ContVec (Elems w)
forall x (xs :: [*]). ContVec (x : xs) -> ContVec xs
C.tail (ContVec (a : Elems w) -> ContVec (Elems w))
-> (v -> ContVec (a : Elems w)) -> v -> ContVec (Elems w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVec (a : Elems w)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
head :: (HVector v, Elems v ~ (a : as), Arity as)
=> v -> a
{-# INLINE head #-}
head :: v -> a
head = ContVec (a : as) -> a
forall (xs :: [*]) x. Arity xs => ContVec (x : xs) -> x
C.head (ContVec (a : as) -> a) -> (v -> ContVec (a : as)) -> v -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVec (a : as)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
cons :: (HVector v, HVector w, Elems w ~ (a : Elems v))
=> a -> v -> w
{-# INLINE cons #-}
cons :: a -> v -> w
cons a
a = ContVec (a : Elems v) -> w
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (a : Elems v) -> w)
-> (v -> ContVec (a : Elems v)) -> v -> w
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> ContVec (Elems v) -> ContVec (a : Elems v)
forall x (xs :: [*]). x -> ContVec xs -> ContVec (x : xs)
C.cons a
a (ContVec (Elems v) -> ContVec (a : Elems v))
-> (v -> ContVec (Elems v)) -> v -> ContVec (a : Elems v)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
concat :: ( HVector v, HVector u, HVector w
, Elems w ~ (Elems v ++ Elems u)
)
=> v -> u -> w
concat :: v -> u -> w
concat v
v u
u = ContVec (Elems v ++ Elems u) -> w
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (Elems v ++ Elems u) -> w)
-> ContVec (Elems v ++ Elems u) -> w
forall a b. (a -> b) -> a -> b
$ ContVec (Elems v)
-> ContVec (Elems u) -> ContVec (Elems v ++ Elems u)
forall (xs :: [*]) (ys :: [*]).
Arity xs =>
ContVec xs -> ContVec ys -> ContVec (xs ++ ys)
C.concat (v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
v) (u -> ContVec (Elems u)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec u
u)
{-# INLINE concat #-}
index
:: forall n v proxy. (Index (Peano n) (Elems v), HVector v)
=> proxy n
-> v
-> ValueAt (Peano n) (Elems v)
{-# INLINE index #-}
index :: proxy n -> v -> ValueAt (Peano n) (Elems v)
index proxy n
_ v
v = ContVec (Elems v) -> Proxy (Peano n) -> ValueAt (Peano n) (Elems v)
forall (n :: PeanoNum) (xs :: [*]) (proxy :: PeanoNum -> *).
Index n xs =>
ContVec xs -> proxy n -> ValueAt n xs
C.index (v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
v) (Proxy (Peano n)
forall k (t :: k). Proxy t
Proxy @(Peano n))
set :: forall n v proxy. (Index (Peano n) (Elems v), HVector v)
=> proxy n
-> ValueAt (Peano n) (Elems v)
-> v
-> v
{-# INLINE set #-}
set :: proxy n -> ValueAt (Peano n) (Elems v) -> v -> v
set proxy n
_ ValueAt (Peano n) (Elems v)
x = ContVec (Elems v) -> v
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector
(ContVec (Elems v) -> v) -> (v -> ContVec (Elems v)) -> v -> v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (Peano n)
-> ValueAt (Peano n) (Elems v)
-> ContVec (Elems v)
-> ContVec (Elems v)
forall (n :: PeanoNum) (xs :: [*]) (proxy :: PeanoNum -> *).
Index n xs =>
proxy n -> ValueAt n xs -> ContVec xs -> ContVec xs
C.set (Proxy (Peano n)
forall k (t :: k). Proxy t
Proxy @(Peano n)) ValueAt (Peano n) (Elems v)
x
(ContVec (Elems v) -> ContVec (Elems v))
-> (v -> ContVec (Elems v)) -> v -> ContVec (Elems v)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
element :: forall n v proxy.
( Index (Peano n) (Elems v)
, HVector v
)
=> proxy n
-> Lens' v (ValueAt (Peano n) (Elems v))
{-# INLINE element #-}
element :: proxy n -> Lens' v (ValueAt (Peano n) (Elems v))
element proxy n
_ ValueAt (Peano n) (Elems v) -> f (ValueAt (Peano n) (Elems v))
f v
v = v -> Fun (Elems v) (f v) -> f v
forall v a. HVector v => v -> Fun (Elems v) a -> a
inspect v
v
(Fun (Elems v) (f v) -> f v) -> Fun (Elems v) (f v) -> f v
forall a b. (a -> b) -> a -> b
$ Proxy (Peano n)
-> (ValueAt (Peano n) (Elems v) -> f (ValueAt (Peano n) (Elems v)))
-> Fun (Elems v) v
-> Fun (Elems v) (f v)
forall (n :: PeanoNum) (xs :: [*]) (f :: * -> *) v
(proxy :: PeanoNum -> *) r.
(Index n xs, Functor f, v ~ ValueAt n xs) =>
proxy n -> (v -> f v) -> Fun xs r -> Fun xs (f r)
lensF (Proxy (Peano n)
forall k (t :: k). Proxy t
Proxy @(Peano n)) ValueAt (Peano n) (Elems v) -> f (ValueAt (Peano n) (Elems v))
f Fun (Elems v) v
forall v. HVector v => Fun (Elems v) v
construct
elementCh :: forall n v w a b proxy.
( Index (Peano n) (Elems v)
, ValueAt (Peano n) (Elems v) ~ a
, HVector v
, HVector w
, Elems w ~ NewElems (Peano n) (Elems v) b
)
=> proxy n
-> Lens v w a b
{-# INLINE elementCh #-}
elementCh :: proxy n -> Lens v w a b
elementCh proxy n
_ a -> f b
f v
v = v -> Fun (Elems v) (f w) -> f w
forall v a. HVector v => v -> Fun (Elems v) a -> a
inspect v
v
(Fun (Elems v) (f w) -> f w) -> Fun (Elems v) (f w) -> f w
forall a b. (a -> b) -> a -> b
$ Proxy (Peano n)
-> (ValueAt (Peano n) (Elems v) -> f b)
-> Fun (NewElems (Peano n) (Elems v) b) w
-> Fun (Elems v) (f w)
forall (n :: PeanoNum) (xs :: [*]) (f :: * -> *)
(proxy :: PeanoNum -> *) a r.
(Index n xs, Functor f) =>
proxy n
-> (ValueAt n xs -> f a) -> Fun (NewElems n xs a) r -> Fun xs (f r)
lensChF (Proxy (Peano n)
forall k (t :: k). Proxy t
Proxy @(Peano n)) a -> f b
ValueAt (Peano n) (Elems v) -> f b
f Fun (NewElems (Peano n) (Elems v) b) w
forall v. HVector v => Fun (Elems v) v
construct
tyLookup :: (HVector v, TyLookup a (Elems v)) => v -> a
tyLookup :: v -> a
tyLookup = ContVec (Elems v) -> a
forall a (xs :: [*]). TyLookup a xs => ContVec xs -> a
C.tyLookup (ContVec (Elems v) -> a) -> (v -> ContVec (Elems v)) -> v -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
{-# INLINE tyLookup #-}
tyLookupF :: (HVectorF v, TyLookup a (ElemsF v)) => v f -> f a
tyLookupF :: v f -> f a
tyLookupF = ContVecF (ElemsF v) f -> f a
forall α (a :: α) (xs :: [α]) (f :: α -> *).
TyLookup a xs =>
ContVecF xs f -> f a
C.tyLookupF (ContVecF (ElemsF v) f -> f a)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
{-# INLINE tyLookupF #-}
foldr :: (HVector v, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => a -> b -> b) -> b -> v -> b
{-# INLINE foldr #-}
foldr :: Proxy c -> (forall a. c a => a -> b -> b) -> b -> v -> b
foldr Proxy c
c forall a. c a => a -> b -> b
f b
b0 = Proxy c
-> (forall a. c a => Identity a -> b -> b)
-> b
-> ContVecF (Elems v) Identity
-> b
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *) b.
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => f a -> b -> b)
-> b
-> ContVecF xs f
-> b
C.foldrF Proxy c
c (\(Identity a) b
b -> a -> b -> b
forall a. c a => a -> b -> b
f a
a b
b) b
b0 (ContVecF (Elems v) Identity -> b)
-> (v -> ContVecF (Elems v) Identity) -> v -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
foldl :: (HVector v, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => b -> a -> b) -> b -> v -> b
{-# INLINE foldl #-}
foldl :: Proxy c -> (forall a. c a => b -> a -> b) -> b -> v -> b
foldl Proxy c
c forall a. c a => b -> a -> b
f b
b0 = Proxy c
-> (forall a. c a => b -> Identity a -> b)
-> b
-> ContVecF (Elems v) Identity
-> b
forall α (c :: α -> Constraint) (xs :: [α]) b (f :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => b -> f a -> b)
-> b
-> ContVecF xs f
-> b
C.foldlF Proxy c
c (\b
b (Identity a) -> b -> a -> b
forall a. c a => b -> a -> b
f b
b a
a) b
b0 (ContVecF (Elems v) Identity -> b)
-> (v -> ContVecF (Elems v) Identity) -> v -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
foldMap
:: (HVector v, ArityC c (Elems v), Monoid m)
=> Proxy c -> (forall a. c a => a -> m) -> v -> m
{-# INLINE foldMap #-}
foldMap :: Proxy c -> (forall a. c a => a -> m) -> v -> m
foldMap Proxy c
c forall a. c a => a -> m
f = Proxy c
-> (forall a. c a => Identity a -> m)
-> ContVecF (Elems v) Identity
-> m
forall α m (c :: α -> Constraint) (xs :: [α]) (f :: α -> *).
(Monoid m, ArityC c xs) =>
Proxy c -> (forall (a :: α). c a => f a -> m) -> ContVecF xs f -> m
C.foldMapF Proxy c
c (\(Identity a) -> a -> m
forall a. c a => a -> m
f a
a) (ContVecF (Elems v) Identity -> m)
-> (v -> ContVecF (Elems v) Identity) -> v -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
foldrF :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => f a -> b -> b) -> b -> v f -> b
{-# INLINE foldrF #-}
foldrF :: Proxy c -> (forall a. c a => f a -> b -> b) -> b -> v f -> b
foldrF Proxy c
c forall a. c a => f a -> b -> b
f b
b0 = Proxy c
-> (forall a. c a => f a -> b -> b)
-> b
-> ContVecF (ElemsF v) f
-> b
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *) b.
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => f a -> b -> b)
-> b
-> ContVecF xs f
-> b
C.foldrF Proxy c
c forall a. c a => f a -> b -> b
f b
b0 (ContVecF (ElemsF v) f -> b)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
foldlF :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => b -> f a -> b) -> b -> v f -> b
{-# INLINE foldlF #-}
foldlF :: Proxy c -> (forall a. c a => b -> f a -> b) -> b -> v f -> b
foldlF Proxy c
c forall a. c a => b -> f a -> b
f b
b0 = Proxy c
-> (forall a. c a => b -> f a -> b)
-> b
-> ContVecF (ElemsF v) f
-> b
forall α (c :: α -> Constraint) (xs :: [α]) b (f :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => b -> f a -> b)
-> b
-> ContVecF xs f
-> b
C.foldlF Proxy c
c forall a. c a => b -> f a -> b
f b
b0 (ContVecF (ElemsF v) f -> b)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
foldMapF :: (HVectorF v, ArityC c (ElemsF v), Monoid m)
=> Proxy c -> (forall a. c a => f a -> m) -> v f -> m
{-# INLINE foldMapF #-}
foldMapF :: Proxy c -> (forall a. c a => f a -> m) -> v f -> m
foldMapF Proxy c
c forall a. c a => f a -> m
f = Proxy c
-> (forall a. c a => f a -> m) -> ContVecF (ElemsF v) f -> m
forall α m (c :: α -> Constraint) (xs :: [α]) (f :: α -> *).
(Monoid m, ArityC c xs) =>
Proxy c -> (forall (a :: α). c a => f a -> m) -> ContVecF xs f -> m
C.foldMapF Proxy c
c forall a. c a => f a -> m
f (ContVecF (ElemsF v) f -> m)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
foldrNatF :: (HVectorF v)
=> (forall a. f a -> b -> b) -> b -> v f -> b
{-# INLINE foldrNatF #-}
foldrNatF :: (forall a. f a -> b -> b) -> b -> v f -> b
foldrNatF forall a. f a -> b -> b
f b
b0 = (forall a. f a -> b -> b) -> b -> ContVecF (ElemsF v) f -> b
forall α (xs :: [α]) (f :: α -> *) b.
Arity xs =>
(forall (a :: α). f a -> b -> b) -> b -> ContVecF xs f -> b
C.foldrNatF forall a. f a -> b -> b
f b
b0 (ContVecF (ElemsF v) f -> b)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
foldlNatF :: (HVectorF v)
=> (forall a. b -> f a -> b) -> b -> v f -> b
{-# INLINE foldlNatF #-}
foldlNatF :: (forall a. b -> f a -> b) -> b -> v f -> b
foldlNatF forall a. b -> f a -> b
f b
b0 = (forall a. b -> f a -> b) -> b -> ContVecF (ElemsF v) f -> b
forall α (xs :: [α]) b (f :: α -> *).
Arity xs =>
(forall (a :: α). b -> f a -> b) -> b -> ContVecF xs f -> b
C.foldlNatF forall a. b -> f a -> b
f b
b0 (ContVecF (ElemsF v) f -> b)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
foldMapNatF :: (HVectorF v, Monoid m)
=> (forall a. f a -> m) -> v f -> m
{-# INLINE foldMapNatF #-}
foldMapNatF :: (forall a. f a -> m) -> v f -> m
foldMapNatF forall a. f a -> m
f = (forall a. f a -> m) -> ContVecF (ElemsF v) f -> m
forall α m (xs :: [α]) (f :: α -> *).
(Monoid m, Arity xs) =>
(forall (a :: α). f a -> m) -> ContVecF xs f -> m
C.foldMapNatF forall a. f a -> m
f (ContVecF (ElemsF v) f -> m)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
mapM_ :: (HVector v, ArityC c (Elems v), Applicative f)
=> Proxy c -> (forall a. c a => a -> f ()) -> v -> f ()
{-# INLINE mapM_ #-}
mapM_ :: Proxy c -> (forall a. c a => a -> f ()) -> v -> f ()
mapM_ Proxy c
c forall a. c a => a -> f ()
f = Proxy c
-> (forall a. c a => f () -> a -> f ()) -> f () -> v -> f ()
forall v (c :: * -> Constraint) b.
(HVector v, ArityC c (Elems v)) =>
Proxy c -> (forall a. c a => b -> a -> b) -> b -> v -> b
foldl Proxy c
c (\f ()
m a
a -> f ()
m f () -> f () -> f ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> a -> f ()
forall a. c a => a -> f ()
f a
a) (() -> f ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
unfoldr :: (HVector v, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => b -> (a,b)) -> b -> v
{-# INLINE unfoldr #-}
unfoldr :: Proxy c -> (forall a. c a => b -> (a, b)) -> b -> v
unfoldr Proxy c
c forall a. c a => b -> (a, b)
f = ContVec (Elems v) -> v
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (Elems v) -> v) -> (b -> ContVec (Elems v)) -> b -> v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy c
-> (forall a. c a => b -> (Identity a, b))
-> b
-> ContVec (Elems v)
forall α (c :: α -> Constraint) (xs :: [α]) b (f :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => b -> (f a, b)) -> b -> ContVecF xs f
C.unfoldrF Proxy c
c (\b
b -> let (a
a,b
b') = b -> (a, b)
forall a. c a => b -> (a, b)
f b
b in (a -> Identity a
forall a. a -> Identity a
Identity a
a, b
b'))
unfoldrF :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => b -> (f a,b)) -> b -> v f
{-# INLINE unfoldrF #-}
unfoldrF :: Proxy c -> (forall a. c a => b -> (f a, b)) -> b -> v f
unfoldrF Proxy c
c forall a. c a => b -> (f a, b)
f = ContVecF (ElemsF v) f -> v f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) f -> v f)
-> (b -> ContVecF (ElemsF v) f) -> b -> v f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy c
-> (forall a. c a => b -> (f a, b)) -> b -> ContVecF (ElemsF v) f
forall α (c :: α -> Constraint) (xs :: [α]) b (f :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => b -> (f a, b)) -> b -> ContVecF xs f
C.unfoldrF Proxy c
c forall a. c a => b -> (f a, b)
f
mk0 :: forall v. (HVector v, Elems v ~ '[]) => v
mk0 :: v
mk0 = Fun '[] v -> v
coerce (Fun '[] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[] v)
{-# INLINE mk0 #-}
mk1 :: forall v a. (HVector v, Elems v ~ '[a])
=> a -> v
mk1 :: a -> v
mk1 = Fun '[a] v -> a -> v
coerce (Fun '[a] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[a] v)
{-# INLINE mk1 #-}
mk2 :: forall v a b. (HVector v, Elems v ~ '[a,b])
=> a -> b -> v
mk2 :: a -> b -> v
mk2 = Fun '[a, b] v -> a -> b -> v
coerce (Fun '[a, b] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[a,b] v)
{-# INLINE mk2 #-}
mk3 :: forall v a b c. (HVector v, Elems v ~ '[a,b,c])
=> a -> b -> c -> v
mk3 :: a -> b -> c -> v
mk3 = Fun '[a, b, c] v -> a -> b -> c -> v
coerce (Fun '[a, b, c] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[a,b,c] v)
{-# INLINE mk3 #-}
mk4 :: forall v a b c d. (HVector v, Elems v ~ '[a,b,c,d])
=> a -> b -> c -> d -> v
mk4 :: a -> b -> c -> d -> v
mk4 = Fun '[a, b, c, d] v -> a -> b -> c -> d -> v
coerce (Fun '[a, b, c, d] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[a,b,c,d] v)
{-# INLINE mk4 #-}
mk5 :: forall v a b c d e. (HVector v, Elems v ~ '[a,b,c,d,e])
=> a -> b -> c -> d -> e -> v
mk5 :: a -> b -> c -> d -> e -> v
mk5 = Fun '[a, b, c, d, e] v -> a -> b -> c -> d -> e -> v
coerce (Fun '[a, b, c, d, e] v
forall v. HVector v => Fun (Elems v) v
construct :: Fun '[a,b,c,d,e] v)
{-# INLINE mk5 #-}
mk0F :: forall f v. (HVectorF v, ElemsF v ~ '[]) => v f
mk0F :: v f
mk0F = TFun f '[] (v f) -> v f
coerce (TFun f '[] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[] (v f))
{-# INLINE mk0F #-}
mk1F :: forall f v a. (HVectorF v, ElemsF v ~ '[a])
=> f a -> v f
mk1F :: f a -> v f
mk1F = TFun f '[a] (v f) -> f a -> v f
coerce (TFun f '[a] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[a] (v f))
{-# INLINE mk1F #-}
mk2F :: forall f v a b. (HVectorF v, ElemsF v ~ '[a,b])
=> f a -> f b -> v f
mk2F :: f a -> f b -> v f
mk2F = TFun f '[a, b] (v f) -> f a -> f b -> v f
coerce (TFun f '[a, b] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[a,b] (v f))
{-# INLINE mk2F #-}
mk3F :: forall f v a b c. (HVectorF v, ElemsF v ~ '[a,b,c])
=> f a -> f b -> f c -> v f
mk3F :: f a -> f b -> f c -> v f
mk3F = TFun f '[a, b, c] (v f) -> f a -> f b -> f c -> v f
coerce (TFun f '[a, b, c] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[a,b,c] (v f))
{-# INLINE mk3F #-}
mk4F :: forall f v a b c d. (HVectorF v, ElemsF v ~ '[a,b,c,d])
=> f a -> f b -> f c -> f d -> v f
mk4F :: f a -> f b -> f c -> f d -> v f
mk4F = TFun f '[a, b, c, d] (v f) -> f a -> f b -> f c -> f d -> v f
coerce (TFun f '[a, b, c, d] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[a,b,c,d] (v f))
{-# INLINE mk4F #-}
mk5F :: forall f v a b c d e. (HVectorF v, ElemsF v ~ '[a,b,c,d,e])
=> f a -> f b -> f c -> f d -> f e -> v f
mk5F :: f a -> f b -> f c -> f d -> f e -> v f
mk5F = TFun f '[a, b, c, d, e] (v f)
-> f a -> f b -> f c -> f d -> f e -> v f
coerce (TFun f '[a, b, c, d, e] (v f)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
TFun f (ElemsF v) (v f)
constructF :: TFun f '[a,b,c,d,e] (v f))
{-# INLINE mk5F #-}
map :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => f a -> g a) -> v f -> v g
{-# INLINE map #-}
map :: Proxy c -> (forall a. c a => f a -> g a) -> v f -> v g
map Proxy c
cls forall a. c a => f a -> g a
f = ContVecF (ElemsF v) g -> v g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) g -> v g)
-> (v f -> ContVecF (ElemsF v) g) -> v f -> v g
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy c
-> (forall a. c a => f a -> g a)
-> ContVecF (ElemsF v) f
-> ContVecF (ElemsF v) g
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *)
(g :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => f a -> g a)
-> ContVecF xs f
-> ContVecF xs g
C.map Proxy c
cls forall a. c a => f a -> g a
f (ContVecF (ElemsF v) f -> ContVecF (ElemsF v) g)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> ContVecF (ElemsF v) g
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
mapNat :: (HVectorF v)
=> (forall a. f a -> g a) -> v f -> v g
{-# INLINE mapNat #-}
mapNat :: (forall a. f a -> g a) -> v f -> v g
mapNat forall a. f a -> g a
f = ContVecF (ElemsF v) g -> v g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) g -> v g)
-> (v f -> ContVecF (ElemsF v) g) -> v f -> v g
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. f a -> g a)
-> ContVecF (ElemsF v) f -> ContVecF (ElemsF v) g
forall α (xs :: [α]) (f :: α -> *) (g :: α -> *).
Arity xs =>
(forall (a :: α). f a -> g a) -> ContVecF xs f -> ContVecF xs g
C.mapNat forall a. f a -> g a
f (ContVecF (ElemsF v) f -> ContVecF (ElemsF v) g)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> ContVecF (ElemsF v) g
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
sequence
:: ( Applicative f, HVectorF v, HVector w, ElemsF v ~ Elems w )
=> v f -> f w
{-# INLINE sequence #-}
sequence :: v f -> f w
sequence
= (ContVec (Elems w) -> w) -> f (ContVec (Elems w)) -> f w
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ContVec (Elems w) -> w
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector
(f (ContVec (Elems w)) -> f w)
-> (v f -> f (ContVec (Elems w))) -> v f -> f w
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContVecF (Elems w) (Compose f Identity) -> f (ContVec (Elems w))
forall α (xs :: [α]) (f :: * -> *) (g :: α -> *).
(Arity xs, Applicative f) =>
ContVecF xs (Compose f g) -> f (ContVecF xs g)
C.sequenceF
(ContVecF (Elems w) (Compose f Identity) -> f (ContVec (Elems w)))
-> (v f -> ContVecF (Elems w) (Compose f Identity))
-> v f
-> f (ContVec (Elems w))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. f a -> Compose f Identity a)
-> ContVecF (Elems w) f -> ContVecF (Elems w) (Compose f Identity)
forall α (xs :: [α]) (f :: α -> *) (g :: α -> *).
Arity xs =>
(forall (a :: α). f a -> g a) -> ContVecF xs f -> ContVecF xs g
C.mapNat (f (Identity a) -> Compose f Identity a
forall k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1).
f (g a) -> Compose f g a
Compose (f (Identity a) -> Compose f Identity a)
-> (f a -> f (Identity a)) -> f a -> Compose f Identity a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Identity a) -> f a -> f (Identity a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Identity a
forall a. a -> Identity a
Identity)
(ContVecF (Elems w) f -> ContVecF (Elems w) (Compose f Identity))
-> (v f -> ContVecF (Elems w) f)
-> v f
-> ContVecF (Elems w) (Compose f Identity)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (Elems w) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
sequence_ :: (Applicative f, HVectorF v) => v f -> f ()
{-# INLINE sequence_ #-}
sequence_ :: v f -> f ()
sequence_ = (forall a. f () -> f a -> f ()) -> f () -> v f -> f ()
forall (v :: (* -> *) -> *) b (f :: * -> *).
HVectorF v =>
(forall a. b -> f a -> b) -> b -> v f -> b
foldlNatF (\f ()
m f a
a -> f ()
m f () -> f a -> f ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* f a
a) (() -> f ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
sequenceF :: ( Applicative f, HVectorF v) => v (f `Compose` g) -> f (v g)
{-# INLINE sequenceF #-}
sequenceF :: v (Compose f g) -> f (v g)
sequenceF v (Compose f g)
v = ContVecF (ElemsF v) g -> v g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) g -> v g)
-> f (ContVecF (ElemsF v) g) -> f (v g)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ContVecF (ElemsF v) (Compose f g) -> f (ContVecF (ElemsF v) g)
forall α (xs :: [α]) (f :: * -> *) (g :: α -> *).
(Arity xs, Applicative f) =>
ContVecF xs (Compose f g) -> f (ContVecF xs g)
C.sequenceF (v (Compose f g) -> ContVecF (ElemsF v) (Compose f g)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v (Compose f g)
v)
wrap :: ( HVector v, HVectorF w, Elems v ~ ElemsF w )
=> (forall a. a -> f a) -> v -> w f
{-# INLINE wrap #-}
wrap :: (forall a. a -> f a) -> v -> w f
wrap forall a. a -> f a
f = ContVecF (ElemsF w) f -> w f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF w) f -> w f)
-> (v -> ContVecF (ElemsF w) f) -> v -> w f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Identity a -> f a)
-> ContVecF (ElemsF w) Identity -> ContVecF (ElemsF w) f
forall α (xs :: [α]) (f :: α -> *) (g :: α -> *).
Arity xs =>
(forall (a :: α). f a -> g a) -> ContVecF xs f -> ContVecF xs g
C.mapNat (a -> f a
forall a. a -> f a
f (a -> f a) -> (Identity a -> a) -> Identity a -> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identity a -> a
forall a. Identity a -> a
runIdentity) (ContVecF (ElemsF w) Identity -> ContVecF (ElemsF w) f)
-> (v -> ContVecF (ElemsF w) Identity)
-> v
-> ContVecF (ElemsF w) f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVecF (ElemsF w) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
unwrap :: ( HVectorF v, HVector w, ElemsF v ~ Elems w )
=> (forall a. f a -> a) -> v f -> w
{-# INLINE unwrap #-}
unwrap :: (forall a. f a -> a) -> v f -> w
unwrap forall a. f a -> a
f = ContVec (Elems w) -> w
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (Elems w) -> w) -> (v f -> ContVec (Elems w)) -> v f -> w
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. f a -> Identity a)
-> ContVecF (Elems w) f -> ContVec (Elems w)
forall α (xs :: [α]) (f :: α -> *) (g :: α -> *).
Arity xs =>
(forall (a :: α). f a -> g a) -> ContVecF xs f -> ContVecF xs g
C.mapNat (a -> Identity a
forall a. a -> Identity a
Identity (a -> Identity a) -> (f a -> a) -> f a -> Identity a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f a -> a
forall a. f a -> a
f) (ContVecF (Elems w) f -> ContVec (Elems w))
-> (v f -> ContVecF (Elems w) f) -> v f -> ContVec (Elems w)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (Elems w) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
distribute
:: ( Functor f, HVector v, HVectorF w, Elems v ~ ElemsF w )
=> f v -> w f
{-# INLINE distribute #-}
distribute :: f v -> w f
distribute
= ContVecF (ElemsF w) f -> w f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF
(ContVecF (ElemsF w) f -> w f)
-> (f v -> ContVecF (ElemsF w) f) -> f v -> w f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Compose f Identity a -> f a)
-> ContVecF (ElemsF w) (Compose f Identity)
-> ContVecF (ElemsF w) f
forall (v :: (* -> *) -> *) (f :: * -> *) (g :: * -> *).
HVectorF v =>
(forall a. f a -> g a) -> v f -> v g
mapNat ((Identity a -> a) -> f (Identity a) -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Identity a -> a
forall a. Identity a -> a
runIdentity (f (Identity a) -> f a)
-> (Compose f Identity a -> f (Identity a))
-> Compose f Identity a
-> f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Compose f Identity a -> f (Identity a)
forall k1 (f :: k1 -> *) k2 (g :: k2 -> k1) (a :: k2).
Compose f g a -> f (g a)
getCompose)
(ContVecF (ElemsF w) (Compose f Identity) -> ContVecF (ElemsF w) f)
-> (f v -> ContVecF (ElemsF w) (Compose f Identity))
-> f v
-> ContVecF (ElemsF w) f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (ContVecF (ElemsF w) Identity)
-> ContVecF (ElemsF w) (Compose f Identity)
forall k1 (f :: * -> *) (g :: k1 -> *) (xs :: [k1]).
(Arity xs, Functor f) =>
f (ContVecF xs g) -> ContVecF xs (Compose f g)
C.distributeF
(f (ContVecF (ElemsF w) Identity)
-> ContVecF (ElemsF w) (Compose f Identity))
-> (f v -> f (ContVecF (ElemsF w) Identity))
-> f v
-> ContVecF (ElemsF w) (Compose f Identity)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (v -> ContVecF (ElemsF w) Identity)
-> f v -> f (ContVecF (ElemsF w) Identity)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap v -> ContVecF (ElemsF w) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
distributeF
:: ( Functor f, HVectorF v)
=> f (v g) -> v (f `Compose` g)
{-# INLINE distributeF #-}
distributeF :: f (v g) -> v (Compose f g)
distributeF = ContVecF (ElemsF v) (Compose f g) -> v (Compose f g)
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) (Compose f g) -> v (Compose f g))
-> (f (v g) -> ContVecF (ElemsF v) (Compose f g))
-> f (v g)
-> v (Compose f g)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (ContVecF (ElemsF v) g) -> ContVecF (ElemsF v) (Compose f g)
forall k1 (f :: * -> *) (g :: k1 -> *) (xs :: [k1]).
(Arity xs, Functor f) =>
f (ContVecF xs g) -> ContVecF xs (Compose f g)
C.distributeF (f (ContVecF (ElemsF v) g) -> ContVecF (ElemsF v) (Compose f g))
-> (f (v g) -> f (ContVecF (ElemsF v) g))
-> f (v g)
-> ContVecF (ElemsF v) (Compose f g)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (v g -> ContVecF (ElemsF v) g)
-> f (v g) -> f (ContVecF (ElemsF v) g)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap v g -> ContVecF (ElemsF v) g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
replicate :: (HVector v, ArityC c (Elems v))
=> Proxy c -> (forall x. c x => x) -> v
{-# INLINE replicate #-}
replicate :: Proxy c -> (forall x. c x => x) -> v
replicate Proxy c
c forall x. c x => x
x = ContVec (Elems v) -> v
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector (ContVec (Elems v) -> v) -> ContVec (Elems v) -> v
forall a b. (a -> b) -> a -> b
$ Proxy c -> (forall a. c a => Identity a) -> ContVec (Elems v)
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *).
ArityC c xs =>
Proxy c -> (forall (a :: α). c a => f a) -> ContVecF xs f
C.replicateF Proxy c
c (a -> Identity a
forall a. a -> Identity a
Identity a
forall x. c x => x
x)
replicateM :: (HVector v, Applicative f, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => f a) -> f v
{-# INLINE replicateM #-}
replicateM :: Proxy c -> (forall a. c a => f a) -> f v
replicateM Proxy c
c forall a. c a => f a
x
= (ContVec (Elems v) -> v) -> f (ContVec (Elems v)) -> f v
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ContVec (Elems v) -> v
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector
(f (ContVec (Elems v)) -> f v) -> f (ContVec (Elems v)) -> f v
forall a b. (a -> b) -> a -> b
$ ContVecF (Elems v) (Compose f Identity) -> f (ContVec (Elems v))
forall α (xs :: [α]) (f :: * -> *) (g :: α -> *).
(Arity xs, Applicative f) =>
ContVecF xs (Compose f g) -> f (ContVecF xs g)
C.sequenceF
(ContVecF (Elems v) (Compose f Identity) -> f (ContVec (Elems v)))
-> ContVecF (Elems v) (Compose f Identity) -> f (ContVec (Elems v))
forall a b. (a -> b) -> a -> b
$ Proxy c
-> (forall a. c a => Compose f Identity a)
-> ContVecF (Elems v) (Compose f Identity)
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *).
ArityC c xs =>
Proxy c -> (forall (a :: α). c a => f a) -> ContVecF xs f
C.replicateF Proxy c
c (f (Identity a) -> Compose f Identity a
forall k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1).
f (g a) -> Compose f g a
Compose (f (Identity a) -> Compose f Identity a)
-> f (Identity a) -> Compose f Identity a
forall a b. (a -> b) -> a -> b
$ (a -> Identity a) -> f a -> f (Identity a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Identity a
forall a. a -> Identity a
Identity f a
forall a. c a => f a
x)
replicateNatF :: (HVectorF v, Arity (ElemsF v))
=> (forall a. f a) -> v f
{-# INLINE replicateNatF #-}
replicateNatF :: (forall a. f a) -> v f
replicateNatF forall a. f a
x = ContVecF (ElemsF v) f -> v f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) f -> v f) -> ContVecF (ElemsF v) f -> v f
forall a b. (a -> b) -> a -> b
$ (forall a. f a) -> ContVecF (ElemsF v) f
forall α (xs :: [α]) (f :: α -> *).
Arity xs =>
(forall (a :: α). f a) -> ContVecF xs f
C.replicateNatF forall a. f a
x
replicateF :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => f a) -> v f
{-# INLINE replicateF #-}
replicateF :: Proxy c -> (forall a. c a => f a) -> v f
replicateF Proxy c
c forall a. c a => f a
x = ContVecF (ElemsF v) f -> v f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) f -> v f) -> ContVecF (ElemsF v) f -> v f
forall a b. (a -> b) -> a -> b
$ Proxy c -> (forall a. c a => f a) -> ContVecF (ElemsF v) f
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *).
ArityC c xs =>
Proxy c -> (forall (a :: α). c a => f a) -> ContVecF xs f
C.replicateF Proxy c
c forall a. c a => f a
x
zipWith :: (HVector v, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => a -> a -> a) -> v -> v -> v
{-# INLINE zipWith #-}
zipWith :: Proxy c -> (forall a. c a => a -> a -> a) -> v -> v -> v
zipWith Proxy c
c forall a. c a => a -> a -> a
f v
v v
u
= ContVec (Elems v) -> v
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => ContVec xs -> v
C.vector
(ContVec (Elems v) -> v) -> ContVec (Elems v) -> v
forall a b. (a -> b) -> a -> b
$ Proxy c
-> (forall a. c a => Identity a -> Identity a -> Identity a)
-> ContVec (Elems v)
-> ContVec (Elems v)
-> ContVec (Elems v)
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *)
(g :: α -> *) (h :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => f a -> g a -> h a)
-> ContVecF xs f
-> ContVecF xs g
-> ContVecF xs h
C.zipWithF Proxy c
c (\(Identity a) (Identity b) -> a -> Identity a
forall a. a -> Identity a
Identity (a -> a -> a
forall a. c a => a -> a -> a
f a
a a
b)) (v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
v) (v -> ContVec (Elems v)
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
u)
zipWithF :: (HVectorF v, ArityC c (ElemsF v))
=> Proxy c -> (forall a. c a => f a -> g a -> h a) -> v f -> v g -> v h
{-# INLINE zipWithF #-}
zipWithF :: Proxy c
-> (forall a. c a => f a -> g a -> h a) -> v f -> v g -> v h
zipWithF Proxy c
c forall a. c a => f a -> g a -> h a
f v f
v v g
u
= ContVecF (ElemsF v) h -> v h
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) h -> v h) -> ContVecF (ElemsF v) h -> v h
forall a b. (a -> b) -> a -> b
$ Proxy c
-> (forall a. c a => f a -> g a -> h a)
-> ContVecF (ElemsF v) f
-> ContVecF (ElemsF v) g
-> ContVecF (ElemsF v) h
forall α (c :: α -> Constraint) (xs :: [α]) (f :: α -> *)
(g :: α -> *) (h :: α -> *).
ArityC c xs =>
Proxy c
-> (forall (a :: α). c a => f a -> g a -> h a)
-> ContVecF xs f
-> ContVecF xs g
-> ContVecF xs h
C.zipWithF Proxy c
c forall a. c a => f a -> g a -> h a
f (v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v f
v) (v g -> ContVecF (ElemsF v) g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v g
u)
zipWithNatF :: (HVectorF v)
=> (forall a. f a -> g a -> h a) -> v f -> v g -> v h
{-# INLINE zipWithNatF #-}
zipWithNatF :: (forall a. f a -> g a -> h a) -> v f -> v g -> v h
zipWithNatF forall a. f a -> g a -> h a
f v f
v v g
u
= ContVecF (ElemsF v) h -> v h
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
ContVecF (ElemsF v) f -> v f
C.vectorF (ContVecF (ElemsF v) h -> v h) -> ContVecF (ElemsF v) h -> v h
forall a b. (a -> b) -> a -> b
$ (forall a. f a -> g a -> h a)
-> ContVecF (ElemsF v) f
-> ContVecF (ElemsF v) g
-> ContVecF (ElemsF v) h
forall α (xs :: [α]) (f :: α -> *) (g :: α -> *) (h :: α -> *).
Arity xs =>
(forall (a :: α). f a -> g a -> h a)
-> ContVecF xs f -> ContVecF xs g -> ContVecF xs h
C.zipWithNatF forall a. f a -> g a -> h a
f (v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v f
v) (v g -> ContVecF (ElemsF v) g
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v g
u)
zipFold :: (HVector v, ArityC c (Elems v), Monoid m)
=> Proxy c -> (forall a. c a => a -> a -> m) -> v -> v -> m
{-# INLINE zipFold #-}
zipFold :: Proxy c -> (forall a. c a => a -> a -> m) -> v -> v -> m
zipFold Proxy c
c forall a. c a => a -> a -> m
f v
v v
u
= Proxy c
-> (forall a. c a => Identity a -> Identity a -> m)
-> ContVecF (Elems v) Identity
-> ContVecF (Elems v) Identity
-> m
forall α (xs :: [α]) (c :: α -> Constraint) m (f :: α -> *).
(ArityC c xs, Monoid m) =>
Proxy c
-> (forall (a :: α). c a => f a -> f a -> m)
-> ContVecF xs f
-> ContVecF xs f
-> m
C.zipFoldF Proxy c
c (\(Identity a) (Identity b) -> a -> a -> m
forall a. c a => a -> a -> m
f a
a a
b) (v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
v) (v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec v
u)
zipFoldF :: (HVectorF v, ArityC c (ElemsF v), Monoid m)
=> Proxy c -> (forall a. c a => f a -> f a -> m) -> v f -> v f -> m
{-# INLINE zipFoldF #-}
zipFoldF :: Proxy c -> (forall a. c a => f a -> f a -> m) -> v f -> v f -> m
zipFoldF Proxy c
c forall a. c a => f a -> f a -> m
f v f
v v f
u
= Proxy c
-> (forall a. c a => f a -> f a -> m)
-> ContVecF (ElemsF v) f
-> ContVecF (ElemsF v) f
-> m
forall α (xs :: [α]) (c :: α -> Constraint) m (f :: α -> *).
(ArityC c xs, Monoid m) =>
Proxy c
-> (forall (a :: α). c a => f a -> f a -> m)
-> ContVecF xs f
-> ContVecF xs f
-> m
C.zipFoldF Proxy c
c forall a. c a => f a -> f a -> m
f (v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v f
v) (v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF v f
u)
monomorphize :: ( HVector v
, Peano n ~ Len (Elems v)
, ArityC c (Elems v))
=> Proxy c -> (forall a. c a => a -> x)
-> v -> F.ContVec n x
{-# INLINE monomorphize #-}
monomorphize :: Proxy c -> (forall a. c a => a -> x) -> v -> ContVec n x
monomorphize Proxy c
c forall a. c a => a -> x
f = Proxy c
-> (forall x. c x => Identity x -> x)
-> ContVecF (Elems v) Identity
-> ContVec n x
forall α (c :: α -> Constraint) (xs :: [α]) a (f :: α -> *)
(n :: Nat).
(ArityC c xs, Peano n ~ Len xs) =>
Proxy c
-> (forall (x :: α). c x => f x -> a)
-> ContVecF xs f
-> ContVec n a
C.monomorphizeF Proxy c
c (x -> x
forall a. c a => a -> x
f (x -> x) -> (Identity x -> x) -> Identity x -> x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Identity x -> x
forall a. Identity a -> a
runIdentity) (ContVecF (Elems v) Identity -> ContVec n x)
-> (v -> ContVecF (Elems v) Identity) -> v -> ContVec n x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v -> ContVecF (Elems v) Identity
forall v (xs :: [*]). (HVector v, Elems v ~ xs) => v -> ContVec xs
C.cvec
monomorphizeF :: ( HVectorF v
, Peano n ~ Len (ElemsF v)
, ArityC c (ElemsF v)
)
=> Proxy c -> (forall a. c a => f a -> x)
-> v f -> F.ContVec n x
{-# INLINE monomorphizeF #-}
monomorphizeF :: Proxy c -> (forall a. c a => f a -> x) -> v f -> ContVec n x
monomorphizeF Proxy c
c forall a. c a => f a -> x
f = Proxy c
-> (forall a. c a => f a -> x)
-> ContVecF (ElemsF v) f
-> ContVec n x
forall α (c :: α -> Constraint) (xs :: [α]) a (f :: α -> *)
(n :: Nat).
(ArityC c xs, Peano n ~ Len xs) =>
Proxy c
-> (forall (x :: α). c x => f x -> a)
-> ContVecF xs f
-> ContVec n a
C.monomorphizeF Proxy c
c forall a. c a => f a -> x
f (ContVecF (ElemsF v) f -> ContVec n x)
-> (v f -> ContVecF (ElemsF v) f) -> v f -> ContVec n x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v f -> ContVecF (ElemsF v) f
forall α (v :: (α -> *) -> *) (f :: α -> *).
HVectorF v =>
v f -> ContVecF (ElemsF v) f
C.cvecF
eq :: (HVector v, ArityC Eq (Elems v)) => v -> v -> Bool
eq :: v -> v -> Bool
eq v
v v
u = All -> Bool
getAll (All -> Bool) -> All -> Bool
forall a b. (a -> b) -> a -> b
$ Proxy Eq -> (forall a. Eq a => a -> a -> All) -> v -> v -> All
forall v (c :: * -> Constraint) m.
(HVector v, ArityC c (Elems v), Monoid m) =>
Proxy c -> (forall a. c a => a -> a -> m) -> v -> v -> m
zipFold (Proxy Eq
forall k (t :: k). Proxy t
Proxy :: Proxy Eq) (\a
x a
y -> Bool -> All
All (a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
y)) v
v v
u
{-# INLINE eq #-}
compare :: (HVector v, ArityC Ord (Elems v)) => v -> v -> Ordering
compare :: v -> v -> Ordering
compare = Proxy Ord
-> (forall a. Ord a => a -> a -> Ordering) -> v -> v -> Ordering
forall v (c :: * -> Constraint) m.
(HVector v, ArityC c (Elems v), Monoid m) =>
Proxy c -> (forall a. c a => a -> a -> m) -> v -> v -> m
zipFold (Proxy Ord
forall k (t :: k). Proxy t
Proxy :: Proxy Ord) forall a. Ord a => a -> a -> Ordering
Prelude.compare
{-# INLINE compare #-}
rnf :: (HVector v, ArityC NF.NFData (Elems v)) => v -> ()
rnf :: v -> ()
rnf = Proxy NFData
-> (forall a. NFData a => () -> a -> ()) -> () -> v -> ()
forall v (c :: * -> Constraint) b.
(HVector v, ArityC c (Elems v)) =>
Proxy c -> (forall a. c a => b -> a -> b) -> b -> v -> b
foldl (Proxy NFData
forall k (t :: k). Proxy t
Proxy :: Proxy NF.NFData) (\()
r a
a -> a -> ()
forall a. NFData a => a -> ()
NF.rnf a
a () -> () -> ()
`seq` ()
r) ()
{-# INLINE rnf #-}