| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Vec.DataFamily.SpineStrict.Pigeonhole
Synopsis
- class Pigeonhole f where
- type PigeonholeSize f :: Nat
- from :: f x -> Vec (PigeonholeSize f) x
- to :: Vec (PigeonholeSize f) x -> f x
- gindex :: (Generic i, GFrom i, Generic1 f, GFrom f, GEnumSize i ~ GPigeonholeSize f, InlineInduction (GPigeonholeSize f)) => f a -> i -> a
- gtabulate :: (Generic i, GTo i, Generic1 f, GTo f, GEnumSize i ~ GPigeonholeSize f, InlineInduction (GPigeonholeSize f)) => (i -> a) -> f a
- gix :: (Generic i, GFrom i, Generic1 t, GTo t, GFrom t, GEnumSize i ~ GPigeonholeSize t, InlineInduction (GPigeonholeSize t), Functor f) => i -> (a -> f a) -> t a -> f (t a)
- gtraverse :: (Generic1 t, GFrom t, GTo t, InlineInduction (GPigeonholeSize t), Applicative f) => (a -> f b) -> t a -> f (t b)
- gitraverse :: (Generic i, GTo i, Generic1 t, GFrom t, GTo t, GEnumSize i ~ GPigeonholeSize t, InlineInduction (GPigeonholeSize t), Applicative f) => (i -> a -> f b) -> t a -> f (t b)
- gfrom :: (Generic1 c, GFrom c) => c a -> Vec (GPigeonholeSize c) a
- type GFrom c = GFromRep1 (Rep1 c)
- gto :: forall c a. (Generic1 c, GTo c) => Vec (GPigeonholeSize c) a -> c a
- type GTo c = GToRep1 (Rep1 c)
- type GPigeonholeSize c = PigeonholeSizeRep (Rep1 c) Nat0
Documentation
class Pigeonhole f where Source #
Generic pigeonholes.
Examples:
>>>from (Identity 'a')'a' ::: VNil
>>>data Values a = Values a a a deriving (Generic1)>>>instance Pigeonhole Values>>>from (Values 1 2 3)1 ::: 2 ::: 3 ::: VNil
Minimal complete definition
Nothing
Methods
from :: f x -> Vec (PigeonholeSize f) x Source #
Converts a value to vector
from :: (Generic1 f, GFrom f, PigeonholeSize f ~ GPigeonholeSize f) => f x -> Vec (PigeonholeSize f) x Source #
Converts a value to vector
to :: Vec (PigeonholeSize f) x -> f x Source #
Converts back from vector.
to :: (Generic1 f, GTo f, PigeonholeSize f ~ GPigeonholeSize f) => Vec (PigeonholeSize f) x -> f x Source #
Converts back from vector.
Instances
| Pigeonhole Identity Source # |
|
Defined in Data.Vec.DataFamily.SpineStrict.Pigeonhole Associated Types type PigeonholeSize Identity :: Nat Source # | |
| Pigeonhole (Proxy :: Type -> Type) Source # |
|
Defined in Data.Vec.DataFamily.SpineStrict.Pigeonhole Associated Types type PigeonholeSize Proxy :: Nat Source # | |
| (Pigeonhole f, Pigeonhole g, InlineInduction (PigeonholeSize f)) => Pigeonhole (Product f g) Source # |
|
Defined in Data.Vec.DataFamily.SpineStrict.Pigeonhole Associated Types type PigeonholeSize (Product f g) :: Nat Source # | |
Representable
gindex :: (Generic i, GFrom i, Generic1 f, GFrom f, GEnumSize i ~ GPigeonholeSize f, InlineInduction (GPigeonholeSize f)) => f a -> i -> a Source #
Index.
>>>gindex (Identity 'y') (Proxy :: Proxy Int)'y'
>>>data Key = Key1 | Key2 | Key3 deriving (Generic)>>>data Values a = Values a a a deriving (Generic1)
>>>gindex (Values 'a' 'b' 'c') Key2'b'
gtabulate :: (Generic i, GTo i, Generic1 f, GTo f, GEnumSize i ~ GPigeonholeSize f, InlineInduction (GPigeonholeSize f)) => (i -> a) -> f a Source #
Tabulate.
>>>gtabulate (\() -> 'x') :: Identity CharIdentity 'x'
>>>gtabulate absurd :: Proxy IntegerProxy
>>>gtabulate absurd :: Proxy IntegerProxy
gix :: (Generic i, GFrom i, Generic1 t, GTo t, GFrom t, GEnumSize i ~ GPigeonholeSize t, InlineInduction (GPigeonholeSize t), Functor f) => i -> (a -> f a) -> t a -> f (t a) Source #
A lens. i -> Lens' (t a) a
>>>Lens.view (gix ()) (Identity 'x')'x'
>>>Lens.over (gix ()) toUpper (Identity 'x')Identity 'X'
Traversable with index
gtraverse :: (Generic1 t, GFrom t, GTo t, InlineInduction (GPigeonholeSize t), Applicative f) => (a -> f b) -> t a -> f (t b) Source #
Generic traverse.
Don't use, rather use DeriveTraversable
gitraverse :: (Generic i, GTo i, Generic1 t, GFrom t, GTo t, GEnumSize i ~ GPigeonholeSize t, InlineInduction (GPigeonholeSize t), Applicative f) => (i -> a -> f b) -> t a -> f (t b) Source #
Traverse with index.
>>>data Key = Key1 | Key2 | Key3 deriving (Show, Generic)>>>data Values a = Values a a a deriving (Generic1)
>>>gitraverse (\i a -> Const [(i :: Key, a)]) (Values 'a' 'b' 'c')Const [(Key1,'a'),(Key2,'b'),(Key3,'c')]
Generic implementation
gto :: forall c a. (Generic1 c, GTo c) => Vec (GPigeonholeSize c) a -> c a Source #
Generic version of to.
type GPigeonholeSize c = PigeonholeSizeRep (Rep1 c) Nat0 Source #
Compute the size from the type.