{-# LANGUAGE TypeFamilies #-}
module Data.Vector.Fixed.Generic (
mapG
, imapG
, mapMG
, imapMG
, zipWithG
, izipWithG
, zipWithMG
, izipWithMG
) where
import Control.Monad (liftM)
import Data.Vector.Fixed.Cont (Vector,Dim)
import qualified Data.Vector.Fixed.Cont as C
mapG :: (Vector v a, Vector w b, Dim v ~ Dim w)
=> (a -> b) -> v a -> w b
{-# INLINE mapG #-}
mapG :: forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b, Dim v ~ Dim w) =>
(a -> b) -> v a -> w b
mapG a -> b
f = forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nat) a b.
Arity n =>
(a -> b) -> ContVec n a -> ContVec n b
C.map a -> b
f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec
imapG :: (Vector v a, Vector w b, Dim v ~ Dim w)
=> (Int -> a -> b) -> v a -> w b
{-# INLINE imapG #-}
imapG :: forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b, Dim v ~ Dim w) =>
(Int -> a -> b) -> v a -> w b
imapG Int -> a -> b
f = forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nat) a b.
Arity n =>
(Int -> a -> b) -> ContVec n a -> ContVec n b
C.imap Int -> a -> b
f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec
mapMG :: (Vector v a, Vector w b, Dim w ~ Dim v, Monad m)
=> (a -> m b) -> v a -> m (w b)
{-# INLINE mapMG #-}
mapMG :: forall (v :: * -> *) a (w :: * -> *) b (m :: * -> *).
(Vector v a, Vector w b, Dim w ~ Dim v, Monad m) =>
(a -> m b) -> v a -> m (w b)
mapMG a -> m b
f = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nat) (f :: * -> *) a b.
(Arity n, Applicative f) =>
(a -> f b) -> ContVec n a -> f (ContVec n b)
C.mapM a -> m b
f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec
imapMG :: (Vector v a, Vector w b, Dim w ~ Dim v, Monad m)
=> (Int -> a -> m b) -> v a -> m (w b)
{-# INLINE imapMG #-}
imapMG :: forall (v :: * -> *) a (w :: * -> *) b (m :: * -> *).
(Vector v a, Vector w b, Dim w ~ Dim v, Monad m) =>
(Int -> a -> m b) -> v a -> m (w b)
imapMG Int -> a -> m b
f = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (n :: Nat) (f :: * -> *) a b.
(Arity n, Applicative f) =>
(Int -> a -> f b) -> ContVec n a -> f (ContVec n b)
C.imapM Int -> a -> m b
f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec
zipWithG :: (Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w)
=> (a -> b -> c) -> v a -> w b -> u c
{-# INLINE zipWithG #-}
zipWithG :: forall (v :: * -> *) a (w :: * -> *) b (u :: * -> *) c.
(Vector v a, Vector w b, Vector u c, Dim v ~ Dim u,
Dim v ~ Dim w) =>
(a -> b -> c) -> v a -> w b -> u c
zipWithG a -> b -> c
f v a
v w b
u = forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall a b. (a -> b) -> a -> b
$ forall (n :: Nat) a b c.
Arity n =>
(a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c
C.zipWith a -> b -> c
f (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec v a
v) (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec w b
u)
zipWithMG :: (Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w, Monad m)
=> (a -> b -> m c) -> v a -> w b -> m (u c)
{-# INLINE zipWithMG #-}
zipWithMG :: forall (v :: * -> *) a (w :: * -> *) b (u :: * -> *) c
(m :: * -> *).
(Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w,
Monad m) =>
(a -> b -> m c) -> v a -> w b -> m (u c)
zipWithMG a -> b -> m c
f v a
v w b
u = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall a b. (a -> b) -> a -> b
$ forall (n :: Nat) (f :: * -> *) a b c.
(Arity n, Applicative f) =>
(a -> b -> f c) -> ContVec n a -> ContVec n b -> f (ContVec n c)
C.zipWithM a -> b -> m c
f (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec v a
v) (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec w b
u)
izipWithG :: (Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w)
=> (Int -> a -> b -> c) -> v a -> w b -> u c
{-# INLINE izipWithG #-}
izipWithG :: forall (v :: * -> *) a (w :: * -> *) b (u :: * -> *) c.
(Vector v a, Vector w b, Vector u c, Dim v ~ Dim u,
Dim v ~ Dim w) =>
(Int -> a -> b -> c) -> v a -> w b -> u c
izipWithG Int -> a -> b -> c
f v a
v w b
u = forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall a b. (a -> b) -> a -> b
$ forall (n :: Nat) a b c.
Arity n =>
(Int -> a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c
C.izipWith Int -> a -> b -> c
f (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec v a
v) (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec w b
u)
izipWithMG :: (Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w, Monad m)
=> (Int -> a -> b -> m c) -> v a -> w b -> m (u c)
{-# INLINE izipWithMG #-}
izipWithMG :: forall (v :: * -> *) a (w :: * -> *) b (u :: * -> *) c
(m :: * -> *).
(Vector v a, Vector w b, Vector u c, Dim v ~ Dim u, Dim v ~ Dim w,
Monad m) =>
(Int -> a -> b -> m c) -> v a -> w b -> m (u c)
izipWithMG Int -> a -> b -> m c
f v a
v w b
u = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
ContVec n a -> v a
C.vector
forall a b. (a -> b) -> a -> b
$ forall (n :: Nat) (f :: * -> *) a b c.
(Arity n, Applicative f) =>
(Int -> a -> b -> f c)
-> ContVec n a -> ContVec n b -> f (ContVec n c)
C.izipWithM Int -> a -> b -> m c
f (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec v a
v) (forall (v :: * -> *) a (n :: Nat).
(Vector v a, Dim v ~ n) =>
v a -> ContVec n a
C.cvec w b
u)