lol-0.6.0.0: A library for lattice cryptography.

Copyright(c) Eric Crockett 2011-2017
Chris Peikert 2011-2017
LicenseGPL-2
Maintainerecrockett0@email.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Crypto.Lol.Types.IZipVector

Contents

Description

Provides applicative-like functions for indexed vectors.

Synopsis

Documentation

data IZipVector m a Source #

Indexed Zip Vector: a wrapper around a (boxed) Vector that has zip-py Applicative behavior, analogous to ZipList for lists. The index m enforces proper lengths (and is necessary to implement pure).

Instances

Functor (IZipVector m) Source # 

Methods

fmap :: (a -> b) -> IZipVector m a -> IZipVector m b #

(<$) :: a -> IZipVector m b -> IZipVector m a #

Fact m => Applicative (IZipVector m) Source # 

Methods

pure :: a -> IZipVector m a #

(<*>) :: IZipVector m (a -> b) -> IZipVector m a -> IZipVector m b #

(*>) :: IZipVector m a -> IZipVector m b -> IZipVector m b #

(<*) :: IZipVector m a -> IZipVector m b -> IZipVector m a #

Foldable (IZipVector m) Source # 

Methods

fold :: Monoid m => IZipVector m m -> m #

foldMap :: Monoid m => (a -> m) -> IZipVector m a -> m #

foldr :: (a -> b -> b) -> b -> IZipVector m a -> b #

foldr' :: (a -> b -> b) -> b -> IZipVector m a -> b #

foldl :: (b -> a -> b) -> b -> IZipVector m a -> b #

foldl' :: (b -> a -> b) -> b -> IZipVector m a -> b #

foldr1 :: (a -> a -> a) -> IZipVector m a -> a #

foldl1 :: (a -> a -> a) -> IZipVector m a -> a #

toList :: IZipVector m a -> [a] #

null :: IZipVector m a -> Bool #

length :: IZipVector m a -> Int #

elem :: Eq a => a -> IZipVector m a -> Bool #

maximum :: Ord a => IZipVector m a -> a #

minimum :: Ord a => IZipVector m a -> a #

sum :: Num a => IZipVector m a -> a #

product :: Num a => IZipVector m a -> a #

Traversable (IZipVector m) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> IZipVector m a -> f (IZipVector m b) #

sequenceA :: Applicative f => IZipVector m (f a) -> f (IZipVector m a) #

mapM :: Monad m => (a -> m b) -> IZipVector m a -> m (IZipVector m b) #

sequence :: Monad m => IZipVector m (m a) -> m (IZipVector m a) #

Eq a => Eq (IZipVector m a) Source # 

Methods

(==) :: IZipVector m a -> IZipVector m a -> Bool #

(/=) :: IZipVector m a -> IZipVector m a -> Bool #

Show a => Show (IZipVector m a) Source # 

Methods

showsPrec :: Int -> IZipVector m a -> ShowS #

show :: IZipVector m a -> String #

showList :: [IZipVector m a] -> ShowS #

NFData a => NFData (IZipVector m a) Source # 

Methods

rnf :: IZipVector m a -> () #

C a => C (IZipVector m a) Source # 

Methods

isZero :: IZipVector m a -> Bool #

(Protoable (IZipVector m (RRq k q Double)), (~) * (ProtoType (IZipVector m (RRq k q Double))) KqProduct, Protoable (IZipVector m b), (~) * (ProtoType (IZipVector m b)) KqProduct) => Protoable (IZipVector m (RRq k q Double, b)) Source # 

Associated Types

type ProtoType (IZipVector m (RRq k q Double, b)) :: * Source #

Methods

toProto :: IZipVector m (RRq k q Double, b) -> ProtoType (IZipVector m (RRq k q Double, b)) Source #

fromProto :: MonadError String m => ProtoType (IZipVector m (RRq k q Double, b)) -> m (IZipVector m (RRq k q Double, b)) Source #

(Protoable (IZipVector m (ZqBasic k q Int64)), (~) * (ProtoType (IZipVector m (ZqBasic k q Int64))) RqProduct, Protoable (IZipVector m b), (~) * (ProtoType (IZipVector m b)) RqProduct) => Protoable (IZipVector m (ZqBasic k q Int64, b)) Source # 

Associated Types

type ProtoType (IZipVector m (ZqBasic k q Int64, b)) :: * Source #

(Fact m, Reflects k q Double) => Protoable (IZipVector m (RRq k q Double)) Source # 

Associated Types

type ProtoType (IZipVector m (RRq k q Double)) :: * Source #

(Fact m, Reflects k q Int64) => Protoable (IZipVector m (ZqBasic k q Int64)) Source # 
Fact m => Protoable (IZipVector m Int64) Source # 
type ProtoType (IZipVector m (RRq k q Double, b)) Source # 
type ProtoType (IZipVector m (ZqBasic k q Int64, b)) Source # 
type ProtoType (IZipVector m (RRq k q Double)) Source # 
type ProtoType (IZipVector m (ZqBasic k q Int64)) Source # 
type ProtoType (IZipVector m Int64) Source # 

iZipVector :: forall m a. Fact m => Vector a -> Maybe (IZipVector m a) Source #

Smart constructor that checks whether length of input is right (should be totient of m).

unIZipVector :: IZipVector m a -> Vector a Source #

Deconstructor

unzipIZV :: IZipVector m (a, b) -> (IZipVector m a, IZipVector m b) Source #

Unzip an IZipVector.

Orphan instances

C a => C (Vector a) Source # 

Methods

isZero :: Vector a -> Bool #