{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies, ScopedTypeVariables #-}
{-# LANGUAGE UndecidableInstances, MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE InstanceSigs #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-----------------------------------------------------------------------
-- |
-- Module      :  Data.Extensible.Dictionary
-- Copyright   :  (c) Fumiaki Kinoshita 2018
-- License     :  BSD3
--
-- Maintainer  :  Fumiaki Kinoshita <fumiexcel@gmail.com>
--
-- Reification of constraints using extensible data types.
-- Also includes orphan instances.
-----------------------------------------------------------------------
module Data.Extensible.Dictionary (library, WrapForall, Instance1, And) where
import Control.DeepSeq
import qualified Data.Aeson as J
import qualified Data.Aeson.Types as J
#ifdef CASSAVA
import qualified Data.Csv as Csv
import qualified Data.ByteString.Char8 as BC
import qualified Data.Vector as V
#endif
import Data.Extensible.Class
import Data.Extensible.Field
import Data.Extensible.Product
import Data.Extensible.Sum
import Data.Extensible.Internal.Rig
import Data.Extensible.Nullable
import Data.Constraint
import Data.Extensible.Struct
import Data.Extensible.Wrapper
import Data.Hashable
import qualified Data.HashMap.Strict as HM
import Data.Text.Prettyprint.Doc
import qualified Data.Vector.Generic as G
import qualified Data.Vector.Generic.Mutable as M
import qualified Data.Vector.Unboxed as U
import qualified Data.Text as T
import Data.Type.Equality
import qualified Language.Haskell.TH.Lift as TH
import Language.Haskell.TH hiding (Type)
import GHC.TypeLits
import Test.QuickCheck.Arbitrary
import Test.QuickCheck.Gen
import Type.Membership

#ifdef BARBIES
import Barbies
import Data.Functor.Product
#endif

-- | Reify a collection of dictionaries, as you wish.
library :: forall c xs. Forall c xs => xs :& Comp Dict c
library :: xs :& Comp Dict c
library = Proxy c
-> (forall (x :: i). c x => Comp Dict c x) -> xs :& Comp Dict c
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c -> (forall (x :: k). c x => h x) -> xs :& h
hrepeatFor (Proxy c
forall k (t :: k). Proxy t
Proxy :: Proxy c) ((forall (x :: i). c x => Comp Dict c x) -> xs :& Comp Dict c)
-> (forall (x :: i). c x => Comp Dict c x) -> xs :& Comp Dict c
forall a b. (a -> b) -> a -> b
$ Dict (c x) -> Comp Dict c x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp Dict (c x)
forall (a :: Constraint). a => Dict a
Dict
{-# INLINE library #-}

class (f x, g x) => And f g x
instance (f x, g x) => And f g x

instance WrapForall Show h xs => Show (xs :& h) where
  showsPrec :: Int -> (xs :& h) -> ShowS
showsPrec d :: Int
d xs :: xs :& h
xs = Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 0)
    (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Show h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Show h x =>
    Membership xs x -> ShowS -> ShowS)
-> ShowS
-> ShowS
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Show h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Show h)) (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
    (\i :: Membership xs x
i r :: ShowS
r -> Int -> h x -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 0 (Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
xs) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString " <: " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
r)
    (String -> ShowS
showString "nil")

instance WrapForall Pretty h xs => Pretty (xs :& h) where
  pretty :: (xs :& h) -> Doc ann
pretty xs :: xs :& h
xs = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
align
    (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
encloseSep (Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
flatAlt "" "{ ") (Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
flatAlt "" " }") (Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
flatAlt "" "; ")
    ([Doc ann] -> Doc ann) -> [Doc ann] -> Doc ann
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Pretty h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Pretty h x =>
    Membership xs x -> [Doc ann] -> [Doc ann])
-> [Doc ann]
-> [Doc ann]
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Pretty h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Pretty h)) (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
    (\i :: Membership xs x
i r :: [Doc ann]
r -> h x -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
xs) Doc ann -> [Doc ann] -> [Doc ann]
forall a. a -> [a] -> [a]
: [Doc ann]
r)
    []


instance WrapForall Eq h xs => Eq (xs :& h) where
  xs :: xs :& h
xs == :: (xs :& h) -> (xs :& h) -> Bool
== ys :: xs :& h
ys = Proxy (Instance1 Eq h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Eq h x =>
    Membership xs x -> Bool -> Bool)
-> Bool
-> Bool
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Eq h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Eq h)) (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
    (\i :: Membership xs x
i r :: Bool
r -> Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
xs h x -> h x -> Bool
forall a. Eq a => a -> a -> Bool
== Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
ys Bool -> Bool -> Bool
&& Bool
r) Bool
True
  {-# INLINE (==) #-}

instance (Eq (xs :& h), WrapForall Ord h xs) => Ord (xs :& h) where
  compare :: (xs :& h) -> (xs :& h) -> Ordering
compare xs :: xs :& h
xs ys :: xs :& h
ys = Proxy (Instance1 Ord h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Ord h x =>
    Membership xs x -> Ordering -> Ordering)
-> Ordering
-> Ordering
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Ord h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Ord h)) (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
    (\i :: Membership xs x
i r :: Ordering
r -> (Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
xs h x -> h x -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
ys) Ordering -> Ordering -> Ordering
forall a. Monoid a => a -> a -> a
`mappend` Ordering
r) Ordering
forall a. Monoid a => a
mempty
  {-# INLINE compare #-}

instance WrapForall Semigroup h xs => Semigroup (xs :& h) where
  <> :: (xs :& h) -> (xs :& h) -> xs :& h
(<>) = (forall (x :: k).
 Comp Dict (Instance1 Semigroup h) x -> h x -> h x -> h x)
-> (xs :& Comp Dict (Instance1 Semigroup h))
-> (xs :& h)
-> (xs :& h)
-> xs :& h
forall k (f :: k -> *) (g :: k -> *) (h :: k -> *) (i :: k -> *)
       (xs :: [k]).
(forall (x :: k). f x -> g x -> h x -> i x)
-> (xs :& f) -> (xs :& g) -> (xs :& h) -> xs :& i
hzipWith3 (\(Comp Dict) -> h x -> h x -> h x
forall a. Semigroup a => a -> a -> a
(<>))
    (xs :& Comp Dict (Instance1 Semigroup h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Semigroup h))
  {-# INLINE (<>) #-}

instance (WrapForall Semigroup h xs, WrapForall Monoid h xs) => Monoid (xs :& h) where
  mempty :: xs :& h
mempty = Proxy (Instance1 Monoid h)
-> (forall (x :: k). Instance1 Monoid h x => h x) -> xs :& h
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c -> (forall (x :: k). c x => h x) -> xs :& h
hrepeatFor (Proxy (Instance1 Monoid h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Monoid h)) forall (x :: k). Instance1 Monoid h x => h x
forall a. Monoid a => a
mempty
  {-# INLINE mempty #-}
  mappend :: (xs :& h) -> (xs :& h) -> xs :& h
mappend = (xs :& h) -> (xs :& h) -> xs :& h
forall a. Semigroup a => a -> a -> a
(<>)
  {-# INLINE mappend #-}

instance WrapForall Hashable h xs => Hashable (xs :& h) where
  hashWithSalt :: Int -> (xs :& h) -> Int
hashWithSalt = Proxy (Instance1 Hashable h)
-> (forall (x :: k).
    Instance1 Hashable h x =>
    Membership xs x -> Int -> h x -> Int)
-> Int
-> (xs :& h)
-> Int
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) r (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> r -> h x -> r)
-> r
-> (xs :& h)
-> r
hfoldlWithIndexFor (Proxy (Instance1 Hashable h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Hashable h))
    ((Int -> h x -> Int) -> Membership xs x -> Int -> h x -> Int
forall a b. a -> b -> a
const Int -> h x -> Int
forall a. Hashable a => Int -> a -> Int
hashWithSalt)
  {-# INLINE hashWithSalt #-}

instance WrapForall Bounded h xs => Bounded (xs :& h) where
  minBound :: xs :& h
minBound = Proxy (Instance1 Bounded h)
-> (forall (x :: k). Instance1 Bounded h x => h x) -> xs :& h
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c -> (forall (x :: k). c x => h x) -> xs :& h
hrepeatFor (Proxy (Instance1 Bounded h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Bounded h)) forall (x :: k). Instance1 Bounded h x => h x
forall a. Bounded a => a
minBound
  maxBound :: xs :& h
maxBound = Proxy (Instance1 Bounded h)
-> (forall (x :: k). Instance1 Bounded h x => h x) -> xs :& h
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c -> (forall (x :: k). c x => h x) -> xs :& h
hrepeatFor (Proxy (Instance1 Bounded h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Bounded h)) forall (x :: k). Instance1 Bounded h x => h x
forall a. Bounded a => a
maxBound

#if !MIN_VERSION_th_lift(0,7,9)
instance TH.Lift a => TH.Lift (Identity a) where
  lift = appE (conE 'Identity) . TH.lift . runIdentity

instance TH.Lift a => TH.Lift (Const a b) where
  lift = appE (conE 'Const) . TH.lift . getConst
#endif

instance WrapForall TH.Lift h xs => TH.Lift (xs :& h) where
  lift :: (xs :& h) -> Q Exp
lift = Proxy (Instance1 Lift h)
-> (forall (x :: k).
    Instance1 Lift h x =>
    Membership xs x -> h x -> Q Exp -> Q Exp)
-> Q Exp
-> (xs :& h)
-> Q Exp
forall k (c :: k -> Constraint) (xs :: [k]) (h :: k -> *) r
       (proxy :: (k -> Constraint) -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> h x -> r -> r)
-> r
-> (xs :& h)
-> r
hfoldrWithIndexFor (Proxy (Instance1 Lift h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 TH.Lift h))
    (\_ x :: h x
x xs :: Q Exp
xs -> Maybe (Q Exp) -> Q Exp -> Maybe (Q Exp) -> Q Exp
infixE (Q Exp -> Maybe (Q Exp)
forall a. a -> Maybe a
Just (Q Exp -> Maybe (Q Exp)) -> Q Exp -> Maybe (Q Exp)
forall a b. (a -> b) -> a -> b
$ h x -> Q Exp
forall t. Lift t => t -> Q Exp
TH.lift h x
x) (Name -> Q Exp
varE '(<:)) (Q Exp -> Maybe (Q Exp)
forall a. a -> Maybe a
Just Q Exp
xs)) (Name -> Q Exp
varE 'nil)

newtype instance U.MVector s (xs :& h) = MV_Product (xs :& Comp (U.MVector s) h)
newtype instance U.Vector (xs :& h) = V_Product (xs :& Comp U.Vector h)

hlookupC :: Membership xs a -> xs :& Comp f g -> f (g a)
hlookupC :: Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC i :: Membership xs a
i = Comp f g a -> f (g a)
forall j (f :: j -> *) i (g :: i -> j) (a :: i).
Comp f g a -> f (g a)
getComp (Comp f g a -> f (g a))
-> ((xs :& Comp f g) -> Comp f g a) -> (xs :& Comp f g) -> f (g a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Membership xs a -> (xs :& Comp f g) -> Comp f g a
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs a
i

instance WrapForall U.Unbox h (x ': xs) => G.Vector U.Vector ((x ': xs) :& h) where
  basicUnsafeFreeze :: Mutable Vector (PrimState m) ((x : xs) :& h)
-> m (Vector ((x : xs) :& h))
basicUnsafeFreeze (MV_Product v) = (((x : xs) :& Comp Vector h) -> Vector ((x : xs) :& h))
-> m ((x : xs) :& Comp Vector h) -> m (Vector ((x : xs) :& h))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((x : xs) :& Comp Vector h) -> Vector ((x : xs) :& h)
forall i (xs :: [i]) (h :: i -> *).
(xs :& Comp Vector h) -> Vector (xs :& h)
V_Product
    (m ((x : xs) :& Comp Vector h) -> m (Vector ((x : xs) :& h)))
-> m ((x : xs) :& Comp Vector h) -> m (Vector ((x : xs) :& h))
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp Vector h x))
-> m ((x : xs) :& Comp Vector h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> m (Comp Vector h x))
 -> m ((x : xs) :& Comp Vector h))
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp Vector h x))
-> m ((x : xs) :& Comp Vector h)
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> Vector (h x) -> Comp Vector h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (Vector (h x) -> Comp Vector h x)
-> m (Vector (h x)) -> m (Comp Vector h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mutable Vector (PrimState m) (h x) -> m (Vector (h x))
forall (v :: * -> *) a (m :: * -> *).
(Vector v a, PrimMonad m) =>
Mutable v (PrimState m) a -> m (v a)
G.basicUnsafeFreeze (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp (MVector (PrimState m)) h
v)
  basicUnsafeThaw :: Vector ((x : xs) :& h)
-> m (Mutable Vector (PrimState m) ((x : xs) :& h))
basicUnsafeThaw (V_Product v) = (((x : xs) :& Comp (MVector (PrimState m)) h)
 -> MVector (PrimState m) ((x : xs) :& h))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) ((x : xs) :& h)
forall i s (xs :: [i]) (h :: i -> *).
(xs :& Comp (MVector s) h) -> MVector s (xs :& h)
MV_Product
    (m ((x : xs) :& Comp (MVector (PrimState m)) h)
 -> m (Mutable Vector (PrimState m) ((x : xs) :& h)))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (Mutable Vector (PrimState m) ((x : xs) :& h))
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
 -> m ((x : xs) :& Comp (MVector (PrimState m)) h))
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x)
-> m (MVector (PrimState m) (h x))
-> m (Comp (MVector (PrimState m)) h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector (h x) -> m (Mutable Vector (PrimState m) (h x))
forall (v :: * -> *) a (m :: * -> *).
(Vector v a, PrimMonad m) =>
v a -> m (Mutable v (PrimState m) a)
G.basicUnsafeThaw (Membership (x : xs) x
-> ((x : xs) :& Comp Vector h) -> Vector (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp Vector h
v)
  basicLength :: Vector ((x : xs) :& h) -> Int
basicLength (V_Product v) = Vector (h x) -> Int
forall (v :: * -> *) a. Vector v a => v a -> Int
G.basicLength (Vector (h x) -> Int) -> Vector (h x) -> Int
forall a b. (a -> b) -> a -> b
$ Comp Vector h x -> Vector (h x)
forall j (f :: j -> *) i (g :: i -> j) (a :: i).
Comp f g a -> f (g a)
getComp (Comp Vector h x -> Vector (h x))
-> Comp Vector h x -> Vector (h x)
forall a b. (a -> b) -> a -> b
$ ((x : xs) :& Comp Vector h)
-> Membership (x : xs) x -> Comp Vector h x
forall k (xs :: [k]) (h :: k -> *) (x :: k).
(xs :& h) -> Membership xs x -> h x
hindex (x : xs) :& Comp Vector h
v Membership (x : xs) x
forall k (x :: k) (xs :: [k]). Membership (x : xs) x
leadership
  basicUnsafeSlice :: Int -> Int -> Vector ((x : xs) :& h) -> Vector ((x : xs) :& h)
basicUnsafeSlice i :: Int
i n :: Int
n (V_Product v) = ((x : xs) :& Comp Vector h) -> Vector ((x : xs) :& h)
forall i (xs :: [i]) (h :: i -> *).
(xs :& Comp Vector h) -> Vector (xs :& h)
V_Product
    (((x : xs) :& Comp Vector h) -> Vector ((x : xs) :& h))
-> ((x : xs) :& Comp Vector h) -> Vector ((x : xs) :& h)
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> Comp Vector h x)
-> (x : xs) :& Comp Vector h
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> h x) -> xs :& h
htabulateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> Comp Vector h x)
 -> (x : xs) :& Comp Vector h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> Comp Vector h x)
-> (x : xs) :& Comp Vector h
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> Vector (h x) -> Comp Vector h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (Vector (h x) -> Comp Vector h x)
-> Vector (h x) -> Comp Vector h x
forall a b. (a -> b) -> a -> b
$ Int -> Int -> Vector (h x) -> Vector (h x)
forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
G.basicUnsafeSlice Int
i Int
n (Membership (x : xs) x
-> ((x : xs) :& Comp Vector h) -> Vector (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp Vector h
v)
  basicUnsafeIndexM :: Vector ((x : xs) :& h) -> Int -> m ((x : xs) :& h)
basicUnsafeIndexM (V_Product v) i :: Int
i = Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (h x))
-> m ((x : xs) :& h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> m (h x))
 -> m ((x : xs) :& h))
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (h x))
-> m ((x : xs) :& h)
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> Vector (h x) -> Int -> m (h x)
forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> Int -> m a
G.basicUnsafeIndexM (Membership (x : xs) x
-> ((x : xs) :& Comp Vector h) -> Vector (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp Vector h
v) Int
i
  basicUnsafeCopy :: Mutable Vector (PrimState m) ((x : xs) :& h)
-> Vector ((x : xs) :& h) -> m ()
basicUnsafeCopy (MV_Product v) (V_Product w)
    = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> Mutable Vector (PrimState m) (h x) -> Vector (h x) -> m ()
forall (v :: * -> *) a (m :: * -> *).
(Vector v a, PrimMonad m) =>
Mutable v (PrimState m) a -> v a -> m ()
G.basicUnsafeCopy (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v) (Membership (x : xs) x
-> ((x : xs) :& Comp Vector h) -> Vector (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp Vector h
w)) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())

instance WrapForall U.Unbox h (x ': xs) => M.MVector U.MVector ((x ': xs) :& h) where
  basicLength :: MVector s ((x : xs) :& h) -> Int
basicLength (MV_Product v) = MVector s (h x) -> Int
forall (v :: * -> * -> *) a s. MVector v a => v s a -> Int
M.basicLength (MVector s (h x) -> Int) -> MVector s (h x) -> Int
forall a b. (a -> b) -> a -> b
$ Comp (MVector s) h x -> MVector s (h x)
forall j (f :: j -> *) i (g :: i -> j) (a :: i).
Comp f g a -> f (g a)
getComp (Comp (MVector s) h x -> MVector s (h x))
-> Comp (MVector s) h x -> MVector s (h x)
forall a b. (a -> b) -> a -> b
$ ((x : xs) :& Comp (MVector s) h)
-> Membership (x : xs) x -> Comp (MVector s) h x
forall k (xs :: [k]) (h :: k -> *) (x :: k).
(xs :& h) -> Membership xs x -> h x
hindex (x : xs) :& Comp (MVector s) h
v Membership (x : xs) x
forall k (x :: k) (xs :: [k]). Membership (x : xs) x
leadership
  basicUnsafeSlice :: Int
-> Int -> MVector s ((x : xs) :& h) -> MVector s ((x : xs) :& h)
basicUnsafeSlice i :: Int
i n :: Int
n (MV_Product v) = ((x : xs) :& Comp (MVector s) h) -> MVector s ((x : xs) :& h)
forall i s (xs :: [i]) (h :: i -> *).
(xs :& Comp (MVector s) h) -> MVector s (xs :& h)
MV_Product
    (((x : xs) :& Comp (MVector s) h) -> MVector s ((x : xs) :& h))
-> ((x : xs) :& Comp (MVector s) h) -> MVector s ((x : xs) :& h)
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> Comp (MVector s) h x)
-> (x : xs) :& Comp (MVector s) h
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> h x) -> xs :& h
htabulateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> Comp (MVector s) h x)
 -> (x : xs) :& Comp (MVector s) h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> Comp (MVector s) h x)
-> (x : xs) :& Comp (MVector s) h
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> MVector s (h x) -> Comp (MVector s) h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (MVector s (h x) -> Comp (MVector s) h x)
-> MVector s (h x) -> Comp (MVector s) h x
forall a b. (a -> b) -> a -> b
$ Int -> Int -> MVector s (h x) -> MVector s (h x)
forall (v :: * -> * -> *) a s.
MVector v a =>
Int -> Int -> v s a -> v s a
M.basicUnsafeSlice Int
i Int
n (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector s) h) -> MVector s (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp (MVector s) h
v)
  basicOverlaps :: MVector s ((x : xs) :& h) -> MVector s ((x : xs) :& h) -> Bool
basicOverlaps (MV_Product v1) (MV_Product v2) = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> Bool -> Bool)
-> Bool
-> Bool
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor
    (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs))
    (\i :: Membership (x : xs) x
i -> Bool -> Bool -> Bool
(||) (Bool -> Bool -> Bool) -> Bool -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ MVector s (h x) -> MVector s (h x) -> Bool
forall (v :: * -> * -> *) a s.
MVector v a =>
v s a -> v s a -> Bool
M.basicOverlaps (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector s) h) -> MVector s (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector s) h
v1) (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector s) h) -> MVector s (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector s) h
v2))
    Bool
False
  basicUnsafeNew :: Int -> m (MVector (PrimState m) ((x : xs) :& h))
basicUnsafeNew n :: Int
n = (((x : xs) :& Comp (MVector (PrimState m)) h)
 -> MVector (PrimState m) ((x : xs) :& h))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) ((x : xs) :& h)
forall i s (xs :: [i]) (h :: i -> *).
(xs :& Comp (MVector s) h) -> MVector s (xs :& h)
MV_Product
    (m ((x : xs) :& Comp (MVector (PrimState m)) h)
 -> m (MVector (PrimState m) ((x : xs) :& h)))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    (m (Comp (MVector (PrimState m)) h x)
-> Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x)
forall a b. a -> b -> a
const (m (Comp (MVector (PrimState m)) h x)
 -> Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m (Comp (MVector (PrimState m)) h x)
-> Membership (x : xs) x
-> m (Comp (MVector (PrimState m)) h x)
forall a b. (a -> b) -> a -> b
$ MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x)
-> m (MVector (PrimState m) (h x))
-> m (Comp (MVector (PrimState m)) h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> m (MVector (PrimState m) (h x))
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
Int -> m (v (PrimState m) a)
M.basicUnsafeNew Int
n)
  basicInitialize :: MVector (PrimState m) ((x : xs) :& h) -> m ()
basicInitialize (MV_Product v) = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> m ()
M.basicInitialize (MVector (PrimState m) (h x) -> m ())
-> MVector (PrimState m) (h x) -> m ()
forall a b. (a -> b) -> a -> b
$ Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicUnsafeReplicate :: Int -> ((x : xs) :& h) -> m (MVector (PrimState m) ((x : xs) :& h))
basicUnsafeReplicate n :: Int
n x :: (x : xs) :& h
x = (((x : xs) :& Comp (MVector (PrimState m)) h)
 -> MVector (PrimState m) ((x : xs) :& h))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) ((x : xs) :& h)
forall i s (xs :: [i]) (h :: i -> *).
(xs :& Comp (MVector s) h) -> MVector s (xs :& h)
MV_Product
    (m ((x : xs) :& Comp (MVector (PrimState m)) h)
 -> m (MVector (PrimState m) ((x : xs) :& h)))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
 -> m ((x : xs) :& Comp (MVector (PrimState m)) h))
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall a b. (a -> b) -> a -> b
$ \m :: Membership (x : xs) x
m -> (MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x)
-> m (MVector (PrimState m) (h x))
-> m (Comp (MVector (PrimState m)) h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (m (MVector (PrimState m) (h x))
 -> m (Comp (MVector (PrimState m)) h x))
-> m (MVector (PrimState m) (h x))
-> m (Comp (MVector (PrimState m)) h x)
forall a b. (a -> b) -> a -> b
$ Int -> h x -> m (MVector (PrimState m) (h x))
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
Int -> a -> m (v (PrimState m) a)
M.basicUnsafeReplicate Int
n (h x -> m (MVector (PrimState m) (h x)))
-> h x -> m (MVector (PrimState m) (h x))
forall a b. (a -> b) -> a -> b
$ Membership (x : xs) x -> ((x : xs) :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership (x : xs) x
m (x : xs) :& h
x
  basicUnsafeRead :: MVector (PrimState m) ((x : xs) :& h) -> Int -> m ((x : xs) :& h)
basicUnsafeRead (MV_Product v) i :: Int
i = Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (h x))
-> m ((x : xs) :& h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    (\m :: Membership (x : xs) x
m -> MVector (PrimState m) (h x) -> Int -> m (h x)
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> Int -> m a
M.basicUnsafeRead (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp (MVector (PrimState m)) h
v) Int
i)
  basicUnsafeWrite :: MVector (PrimState m) ((x : xs) :& h)
-> Int -> ((x : xs) :& h) -> m ()
basicUnsafeWrite (MV_Product v) i :: Int
i x :: (x : xs) :& h
x = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \m :: Membership (x : xs) x
m -> MVector (PrimState m) (h x) -> Int -> h x -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> Int -> a -> m ()
M.basicUnsafeWrite (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
m (x : xs) :& Comp (MVector (PrimState m)) h
v) Int
i (Membership (x : xs) x -> ((x : xs) :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership (x : xs) x
m (x : xs) :& h
x)) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicClear :: MVector (PrimState m) ((x : xs) :& h) -> m ()
basicClear (MV_Product v) = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> m ()
M.basicClear (MVector (PrimState m) (h x) -> m ())
-> MVector (PrimState m) (h x) -> m ()
forall a b. (a -> b) -> a -> b
$ Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicSet :: MVector (PrimState m) ((x : xs) :& h) -> ((x : xs) :& h) -> m ()
basicSet (MV_Product v) x :: (x : xs) :& h
x = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> h x -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> a -> m ()
M.basicSet (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v) (Membership (x : xs) x -> ((x : xs) :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership (x : xs) x
i (x : xs) :& h
x)) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicUnsafeCopy :: MVector (PrimState m) ((x : xs) :& h)
-> MVector (PrimState m) ((x : xs) :& h) -> m ()
basicUnsafeCopy (MV_Product v1) (MV_Product v2)
    = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> MVector (PrimState m) (h x) -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> v (PrimState m) a -> m ()
M.basicUnsafeCopy (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v1) (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v2)) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicUnsafeMove :: MVector (PrimState m) ((x : xs) :& h)
-> MVector (PrimState m) ((x : xs) :& h) -> m ()
basicUnsafeMove (MV_Product v1) (MV_Product v2)
    = Proxy (Instance1 Unbox h)
-> Proxy (x : xs)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m () -> m ())
-> m ()
-> m ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h)) (Proxy (x : xs)
forall k (t :: k). Proxy t
Proxy :: Proxy (x ': xs)) (m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (m () -> m () -> m ())
-> (Membership (x : xs) x -> m ())
-> Membership (x : xs) x
-> m ()
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> MVector (PrimState m) (h x) -> m ()
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> v (PrimState m) a -> m ()
M.basicUnsafeMove (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v1) (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v2)) (() -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
  basicUnsafeGrow :: MVector (PrimState m) ((x : xs) :& h)
-> Int -> m (MVector (PrimState m) ((x : xs) :& h))
basicUnsafeGrow (MV_Product v) n :: Int
n = (((x : xs) :& Comp (MVector (PrimState m)) h)
 -> MVector (PrimState m) ((x : xs) :& h))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) ((x : xs) :& h)
forall i s (xs :: [i]) (h :: i -> *).
(xs :& Comp (MVector s) h) -> MVector s (xs :& h)
MV_Product
    (m ((x : xs) :& Comp (MVector (PrimState m)) h)
 -> m (MVector (PrimState m) ((x : xs) :& h)))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
-> m (MVector (PrimState m) ((x : xs) :& h))
forall a b. (a -> b) -> a -> b
$ Proxy (Instance1 Unbox h)
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Unbox h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 U.Unbox h))
    ((forall (x :: k).
  Instance1 Unbox h x =>
  Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
 -> m ((x : xs) :& Comp (MVector (PrimState m)) h))
-> (forall (x :: k).
    Instance1 Unbox h x =>
    Membership (x : xs) x -> m (Comp (MVector (PrimState m)) h x))
-> m ((x : xs) :& Comp (MVector (PrimState m)) h)
forall a b. (a -> b) -> a -> b
$ \i :: Membership (x : xs) x
i -> MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x
forall j i (f :: j -> *) (g :: i -> j) (a :: i).
f (g a) -> Comp f g a
Comp (MVector (PrimState m) (h x) -> Comp (MVector (PrimState m)) h x)
-> m (MVector (PrimState m) (h x))
-> m (Comp (MVector (PrimState m)) h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MVector (PrimState m) (h x)
-> Int -> m (MVector (PrimState m) (h x))
forall (v :: * -> * -> *) a (m :: * -> *).
(MVector v a, PrimMonad m) =>
v (PrimState m) a -> Int -> m (v (PrimState m) a)
M.basicUnsafeGrow (Membership (x : xs) x
-> ((x : xs) :& Comp (MVector (PrimState m)) h)
-> MVector (PrimState m) (h x)
forall k j (xs :: [k]) (a :: k) (f :: j -> *) (g :: k -> j).
Membership xs a -> (xs :& Comp f g) -> f (g a)
hlookupC Membership (x : xs) x
i (x : xs) :& Comp (MVector (PrimState m)) h
v) Int
n

instance WrapForall U.Unbox h (x ': xs) => U.Unbox ((x ': xs) :& h)

instance WrapForall Arbitrary h xs => Arbitrary (xs :& h) where
  arbitrary :: Gen (xs :& h)
arbitrary = Proxy (Instance1 Arbitrary h)
-> (forall (x :: k).
    Instance1 Arbitrary h x =>
    Membership xs x -> Gen (h x))
-> Gen (xs :& h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 Arbitrary h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Arbitrary h)) (Gen (h x) -> Membership xs x -> Gen (h x)
forall a b. a -> b -> a
const Gen (h x)
forall a. Arbitrary a => Gen a
arbitrary)
  shrink :: (xs :& h) -> [xs :& h]
shrink xs :: xs :& h
xs = Proxy (Instance1 Arbitrary h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Arbitrary h x =>
    Membership xs x -> [xs :& h] -> [xs :& h])
-> [xs :& h]
-> [xs :& h]
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 Arbitrary h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Arbitrary h))
    (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs) (\i :: Membership xs x
i -> [xs :& h] -> [xs :& h] -> [xs :& h]
forall a. [a] -> [a] -> [a]
(++)
    ([xs :& h] -> [xs :& h] -> [xs :& h])
-> [xs :& h] -> [xs :& h] -> [xs :& h]
forall a b. (a -> b) -> a -> b
$ (h x -> xs :& h) -> [h x] -> [xs :& h]
forall a b. (a -> b) -> [a] -> [b]
map (\x :: h x
x -> (forall s. Struct s h xs -> ST s ()) -> (xs :& h) -> xs :& h
forall k (h :: k -> *) (xs :: [k]).
(forall s. Struct s h xs -> ST s ()) -> (xs :& h) -> xs :& h
hmodify (\s :: Struct s h xs
s -> Struct (PrimState (ST s)) h xs -> Membership xs x -> h x -> ST s ()
forall k (m :: * -> *) (h :: k -> *) (xs :: [k]) (x :: k).
PrimMonad m =>
Struct (PrimState m) h xs -> Membership xs x -> h x -> m ()
set Struct s h xs
Struct (PrimState (ST s)) h xs
s Membership xs x
i h x
x) xs :& h
xs) ([h x] -> [xs :& h]) -> [h x] -> [xs :& h]
forall a b. (a -> b) -> a -> b
$ h x -> [h x]
forall a. Arbitrary a => a -> [a]
shrink (h x -> [h x]) -> h x -> [h x]
forall a b. (a -> b) -> a -> b
$ (xs :& h) -> Membership xs x -> h x
forall k (xs :: [k]) (h :: k -> *) (x :: k).
(xs :& h) -> Membership xs x -> h x
hindex xs :& h
xs Membership xs x
i)
    []

instance WrapForall NFData h xs => NFData (xs :& h) where
  rnf :: (xs :& h) -> ()
rnf xs :: xs :& h
xs = Proxy (Instance1 NFData h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 NFData h x =>
    Membership xs x -> () -> ())
-> ()
-> ()
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor (Proxy (Instance1 NFData h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 NFData h)) (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
    (\i :: Membership xs x
i -> h x -> () -> ()
forall a b. NFData a => a -> b -> b
deepseq (Membership xs x -> (xs :& h) -> h x
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> (xs :& h) -> h x
hlookup Membership xs x
i xs :& h
xs)) ()
  {-# INLINE rnf #-}

#ifdef CASSAVA
instance WrapForall Csv.FromField h xs => Csv.FromRecord (xs :& h) where
  parseRecord :: Record -> Parser (xs :& h)
parseRecord rec :: Record
rec = Proxy (Instance1 FromField h)
-> (forall (x :: k).
    Instance1 FromField h x =>
    Membership xs x -> Parser (h x))
-> Parser (xs :& h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (Instance1 FromField h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Csv.FromField h))
    ((forall (x :: k).
  Instance1 FromField h x =>
  Membership xs x -> Parser (h x))
 -> Parser (xs :& h))
-> (forall (x :: k).
    Instance1 FromField h x =>
    Membership xs x -> Parser (h x))
-> Parser (xs :& h)
forall a b. (a -> b) -> a -> b
$ \i :: Membership xs x
i -> Record -> Int -> Parser Field
forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> Int -> m a
G.indexM Record
rec (Membership xs x -> Int
forall k (xs :: [k]) (x :: k). Membership xs x -> Int
getMemberId Membership xs x
i) Parser Field -> (Field -> Parser (h x)) -> Parser (h x)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Field -> Parser (h x)
forall a. FromField a => Field -> Parser a
Csv.parseField

instance Forall (KeyTargetAre KnownSymbol (Instance1 Csv.FromField h)) xs => Csv.FromNamedRecord (xs :& Field h) where
  parseNamedRecord :: NamedRecord -> Parser (xs :& Field h)
parseNamedRecord rec :: NamedRecord
rec = Proxy (KeyTargetAre KnownSymbol (Instance1 FromField h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromField h) x =>
    Membership xs x -> Parser (Field h x))
-> Parser (xs :& Field h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor (Proxy (KeyTargetAre KnownSymbol (Instance1 FromField h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 Csv.FromField h)))
    ((forall (x :: Assoc Symbol v).
  KeyTargetAre KnownSymbol (Instance1 FromField h) x =>
  Membership xs x -> Parser (Field h x))
 -> Parser (xs :& Field h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromField h) x =>
    Membership xs x -> Parser (Field h x))
-> Parser (xs :& Field h)
forall a b. (a -> b) -> a -> b
$ \i :: Membership xs x
i -> NamedRecord
rec NamedRecord -> Field -> Parser Field
forall a. FromField a => NamedRecord -> Field -> Parser a
Csv..: String -> Field
BC.pack (Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
i)) Parser Field -> (Field -> Parser (Field h x)) -> Parser (Field h x)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Field -> Parser (Field h x)
forall a. FromField a => Field -> Parser a
Csv.parseField

instance WrapForall Csv.ToField h xs => Csv.ToRecord (xs :& h) where
  toRecord :: (xs :& h) -> Record
toRecord = [Field] -> Record
forall a. [a] -> Vector a
V.fromList
    ([Field] -> Record)
-> ((xs :& h) -> [Field]) -> (xs :& h) -> Record
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (Instance1 ToField h)
-> (forall (x :: k).
    Instance1 ToField h x =>
    Membership xs x -> h x -> [Field] -> [Field])
-> [Field]
-> (xs :& h)
-> [Field]
forall k (c :: k -> Constraint) (xs :: [k]) (h :: k -> *) r
       (proxy :: (k -> Constraint) -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> h x -> r -> r)
-> r
-> (xs :& h)
-> r
hfoldrWithIndexFor (Proxy (Instance1 ToField h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Csv.ToField h))
      (\_ v :: h x
v -> (:) (Field -> [Field] -> [Field]) -> Field -> [Field] -> [Field]
forall a b. (a -> b) -> a -> b
$ h x -> Field
forall a. ToField a => a -> Field
Csv.toField h x
v) []

instance Forall (KeyTargetAre KnownSymbol (Instance1 Csv.ToField h)) xs => Csv.ToNamedRecord (xs :& Field h) where
  toNamedRecord :: (xs :& Field h) -> NamedRecord
toNamedRecord = Proxy (KeyTargetAre KnownSymbol (Instance1 ToField h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 ToField h) x =>
    Membership xs x -> NamedRecord -> Field h x -> NamedRecord)
-> NamedRecord
-> (xs :& Field h)
-> NamedRecord
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) r (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> r -> h x -> r)
-> r
-> (xs :& h)
-> r
hfoldlWithIndexFor (Proxy (KeyTargetAre KnownSymbol (Instance1 ToField h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 Csv.ToField h)))
    (\k :: Membership xs x
k m :: NamedRecord
m v :: Field h x
v -> Field -> Field -> NamedRecord -> NamedRecord
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
HM.insert (String -> Field
BC.pack (Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
k))) (Field h x -> Field
forall a. ToField a => a -> Field
Csv.toField Field h x
v) NamedRecord
m)
    NamedRecord
forall k v. HashMap k v
HM.empty
#endif

-- | @'parseJSON' 'J.Null'@ is called for missing fields.
instance Forall (KeyTargetAre KnownSymbol (Instance1 J.FromJSON h)) xs => J.FromJSON (xs :& Field h) where
  parseJSON :: Value -> Parser (xs :& Field h)
parseJSON = String
-> (Object -> Parser (xs :& Field h))
-> Value
-> Parser (xs :& Field h)
forall a. String -> (Object -> Parser a) -> Value -> Parser a
J.withObject "Object" ((Object -> Parser (xs :& Field h))
 -> Value -> Parser (xs :& Field h))
-> (Object -> Parser (xs :& Field h))
-> Value
-> Parser (xs :& Field h)
forall a b. (a -> b) -> a -> b
$ \v :: Object
v -> Proxy (KeyTargetAre KnownSymbol (Instance1 FromJSON h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
    Membership xs x -> Parser (Field h x))
-> Parser (xs :& Field h)
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor
    (Proxy (KeyTargetAre KnownSymbol (Instance1 FromJSON h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 J.FromJSON h)))
    ((forall (x :: Assoc Symbol v).
  KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
  Membership xs x -> Parser (Field h x))
 -> Parser (xs :& Field h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
    Membership xs x -> Parser (Field h x))
-> Parser (xs :& Field h)
forall a b. (a -> b) -> a -> b
$ \m :: Membership xs x
m -> let k :: String
k = Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
m)
      in (h (TargetOf x) -> Field h x)
-> Parser (h (TargetOf x)) -> Parser (Field h x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap h (TargetOf x) -> Field h x
forall v k (h :: v -> *) (kv :: Assoc k v).
h (TargetOf kv) -> Field h kv
Field (Parser (h (TargetOf x)) -> Parser (Field h x))
-> Parser (h (TargetOf x)) -> Parser (Field h x)
forall a b. (a -> b) -> a -> b
$ String -> Parser (h (TargetOf x)) -> Parser (h (TargetOf x))
forall a. String -> Parser a -> Parser a
J.prependFailure ("parsing #" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
k String -> ShowS
forall a. [a] -> [a] -> [a]
++ ": ") (Parser (h (TargetOf x)) -> Parser (h (TargetOf x)))
-> Parser (h (TargetOf x)) -> Parser (h (TargetOf x))
forall a b. (a -> b) -> a -> b
$ Value -> Parser (h (TargetOf x))
forall a. FromJSON a => Value -> Parser a
J.parseJSON (Value -> Parser (h (TargetOf x)))
-> Value -> Parser (h (TargetOf x))
forall a b. (a -> b) -> a -> b
$ Value -> (Value -> Value) -> Maybe Value -> Value
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Value
J.Null Value -> Value
forall a. a -> a
id (Maybe Value -> Value) -> Maybe Value -> Value
forall a b. (a -> b) -> a -> b
$ Text -> Object -> Maybe Value
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
HM.lookup (String -> Text
T.pack String
k) Object
v

instance Forall (KeyTargetAre KnownSymbol (Instance1 J.ToJSON h)) xs => J.ToJSON (xs :& Field h) where
  toJSON :: (xs :& Field h) -> Value
toJSON = Object -> Value
J.Object (Object -> Value)
-> ((xs :& Field h) -> Object) -> (xs :& Field h) -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (KeyTargetAre KnownSymbol (Instance1 ToJSON h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 ToJSON h) x =>
    Membership xs x -> Object -> Field h x -> Object)
-> Object
-> (xs :& Field h)
-> Object
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) r (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> r -> h x -> r)
-> r
-> (xs :& h)
-> r
hfoldlWithIndexFor
    (Proxy (KeyTargetAre KnownSymbol (Instance1 ToJSON h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 J.ToJSON h)))
    (\k :: Membership xs x
k m :: Object
m v :: Field h x
v -> Text -> Value -> Object -> Object
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
HM.insert (String -> Text
T.pack (Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
k))) (Field h x -> Value
forall a. ToJSON a => a -> Value
J.toJSON Field h x
v) Object
m)
    Object
forall k v. HashMap k v
HM.empty

instance Forall (KeyTargetAre KnownSymbol (Instance1 J.FromJSON h)) xs => J.FromJSON (xs :& Nullable (Field h)) where
  parseJSON :: Value -> Parser (xs :& Nullable (Field h))
parseJSON = String
-> (Object -> Parser (xs :& Nullable (Field h)))
-> Value
-> Parser (xs :& Nullable (Field h))
forall a. String -> (Object -> Parser a) -> Value -> Parser a
J.withObject "Object" ((Object -> Parser (xs :& Nullable (Field h)))
 -> Value -> Parser (xs :& Nullable (Field h)))
-> (Object -> Parser (xs :& Nullable (Field h)))
-> Value
-> Parser (xs :& Nullable (Field h))
forall a b. (a -> b) -> a -> b
$ \v :: Object
v -> Proxy (KeyTargetAre KnownSymbol (Instance1 FromJSON h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
    Membership xs x -> Parser (Nullable (Field h) x))
-> Parser (xs :& Nullable (Field h))
forall k (c :: k -> Constraint) (xs :: [k]) (f :: * -> *)
       (proxy :: (k -> Constraint) -> *) (h :: k -> *).
(Forall c xs, Applicative f) =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> f (h x))
-> f (xs :& h)
hgenerateFor
    (Proxy (KeyTargetAre KnownSymbol (Instance1 FromJSON h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 J.FromJSON h)))
    ((forall (x :: Assoc Symbol v).
  KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
  Membership xs x -> Parser (Nullable (Field h) x))
 -> Parser (xs :& Nullable (Field h)))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 FromJSON h) x =>
    Membership xs x -> Parser (Nullable (Field h) x))
-> Parser (xs :& Nullable (Field h))
forall a b. (a -> b) -> a -> b
$ \m :: Membership xs x
m -> let k :: String
k = Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
m)
      in (Maybe (Field h x) -> Nullable (Field h) x)
-> Parser (Maybe (Field h x)) -> Parser (Nullable (Field h) x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Maybe (Field h x) -> Nullable (Field h) x
forall k (h :: k -> *) (x :: k). Maybe (h x) -> Nullable h x
Nullable (Parser (Maybe (Field h x)) -> Parser (Nullable (Field h) x))
-> Parser (Maybe (Field h x)) -> Parser (Nullable (Field h) x)
forall a b. (a -> b) -> a -> b
$ (Value -> Parser (Field h x))
-> Maybe Value -> Parser (Maybe (Field h x))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Value -> Parser (Field h x)
forall a. FromJSON a => Value -> Parser a
J.parseJSON (Maybe Value -> Parser (Maybe (Field h x)))
-> Maybe Value -> Parser (Maybe (Field h x))
forall a b. (a -> b) -> a -> b
$ Text -> Object -> Maybe Value
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> Maybe v
HM.lookup (String -> Text
T.pack String
k) Object
v

instance Forall (KeyTargetAre KnownSymbol (Instance1 J.ToJSON h)) xs => J.ToJSON (xs :& Nullable (Field h)) where
  toJSON :: (xs :& Nullable (Field h)) -> Value
toJSON = Object -> Value
J.Object (Object -> Value)
-> ((xs :& Nullable (Field h)) -> Object)
-> (xs :& Nullable (Field h))
-> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (KeyTargetAre KnownSymbol (Instance1 ToJSON h))
-> (forall (x :: Assoc Symbol v).
    KeyTargetAre KnownSymbol (Instance1 ToJSON h) x =>
    Membership xs x -> Object -> Nullable (Field h) x -> Object)
-> Object
-> (xs :& Nullable (Field h))
-> Object
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) r (h :: k -> *).
Forall c xs =>
proxy c
-> (forall (x :: k). c x => Membership xs x -> r -> h x -> r)
-> r
-> (xs :& h)
-> r
hfoldlWithIndexFor
    (Proxy (KeyTargetAre KnownSymbol (Instance1 ToJSON h))
forall k (t :: k). Proxy t
Proxy :: Proxy (KeyTargetAre KnownSymbol (Instance1 J.ToJSON h)))
    (\k :: Membership xs x
k m :: Object
m (Nullable v) -> (Object -> Object)
-> (Field h x -> Object -> Object)
-> Maybe (Field h x)
-> Object
-> Object
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Object -> Object
forall a. a -> a
id (Text -> Value -> Object -> Object
forall k v.
(Eq k, Hashable k) =>
k -> v -> HashMap k v -> HashMap k v
HM.insert (String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ Proxy (KeyOf x) -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (Proxy (KeyOf x) -> String) -> Proxy (KeyOf x) -> String
forall a b. (a -> b) -> a -> b
$ Membership xs x -> Proxy (KeyOf x)
forall k v (proxy :: Assoc k v -> *) (kv :: Assoc k v).
proxy kv -> Proxy (KeyOf kv)
proxyKeyOf Membership xs x
k) (Value -> Object -> Object)
-> (Field h x -> Value) -> Field h x -> Object -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Field h x -> Value
forall a. ToJSON a => a -> Value
J.toJSON) Maybe (Field h x)
v Object
m)
    Object
forall k v. HashMap k v
HM.empty

instance WrapForall Show h xs => Show (xs :/ h) where
  showsPrec :: Int -> (xs :/ h) -> ShowS
showsPrec d :: Int
d (EmbedAt i :: Membership xs x
i h :: h x
h) = Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ String -> ShowS
showString "EmbedAt "
    ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Membership xs x -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 Membership xs x
i
    ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString " "
    ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Optic'
  (->)
  (Const ShowS)
  (xs :& Comp Dict (Instance1 Show h))
  (Comp Dict (Instance1 Show h) x)
-> (Comp Dict (Instance1 Show h) x -> ShowS)
-> (xs :& Comp Dict (Instance1 Show h))
-> ShowS
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const ShowS)
     (xs :& Comp Dict (Instance1 Show h))
     (Comp Dict (Instance1 Show h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i) (\(Comp Dict) -> Int -> h x -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 h x
h) (xs :& Comp Dict (Instance1 Show h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Show h))

instance WrapForall Eq h xs => Eq (xs :/ h) where
  EmbedAt p :: Membership xs x
p g :: h x
g == :: (xs :/ h) -> (xs :/ h) -> Bool
== EmbedAt q :: Membership xs x
q h :: h x
h = case Membership xs x -> Membership xs x -> Either Ordering (x :~: x)
forall k (xs :: [k]) (x :: k) (y :: k).
Membership xs x -> Membership xs y -> Either Ordering (x :~: y)
compareMembership Membership xs x
p Membership xs x
q of
    Left _ -> Bool
False
    Right Refl -> Optic'
  (->)
  (Const Bool)
  (xs :& Comp Dict (Instance1 Eq h))
  (Comp Dict (Instance1 Eq h) x)
-> (Comp Dict (Instance1 Eq h) x -> Bool)
-> (xs :& Comp Dict (Instance1 Eq h))
-> Bool
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const Bool)
     (xs :& Comp Dict (Instance1 Eq h))
     (Comp Dict (Instance1 Eq h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
p) (\(Comp Dict) -> h x
g h x -> h x -> Bool
forall a. Eq a => a -> a -> Bool
== h x
h x
h) (xs :& Comp Dict (Instance1 Eq h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Eq h))
  {-# INLINE (==) #-}

instance (Eq (xs :/ h), WrapForall Ord h xs) => Ord (xs :/ h) where
  EmbedAt p :: Membership xs x
p g :: h x
g compare :: (xs :/ h) -> (xs :/ h) -> Ordering
`compare` EmbedAt q :: Membership xs x
q h :: h x
h = case Membership xs x -> Membership xs x -> Either Ordering (x :~: x)
forall k (xs :: [k]) (x :: k) (y :: k).
Membership xs x -> Membership xs y -> Either Ordering (x :~: y)
compareMembership Membership xs x
p Membership xs x
q of
    Left x :: Ordering
x -> Ordering
x
    Right Refl -> Optic'
  (->)
  (Const Ordering)
  (xs :& Comp Dict (Instance1 Ord h))
  (Comp Dict (Instance1 Ord h) x)
-> (Comp Dict (Instance1 Ord h) x -> Ordering)
-> (xs :& Comp Dict (Instance1 Ord h))
-> Ordering
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const Ordering)
     (xs :& Comp Dict (Instance1 Ord h))
     (Comp Dict (Instance1 Ord h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
p) (\(Comp Dict) -> h x -> h x -> Ordering
forall a. Ord a => a -> a -> Ordering
compare h x
g h x
h x
h) (xs :& Comp Dict (Instance1 Ord h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Ord h))
  {-# INLINE compare #-}

instance WrapForall NFData h xs => NFData (xs :/ h) where
  rnf :: (xs :/ h) -> ()
rnf (EmbedAt i :: Membership xs x
i h :: h x
h) = Optic'
  (->)
  (Const ())
  (xs :& Comp Dict (Instance1 NFData h))
  (Comp Dict (Instance1 NFData h) x)
-> (Comp Dict (Instance1 NFData h) x -> ())
-> (xs :& Comp Dict (Instance1 NFData h))
-> ()
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const ())
     (xs :& Comp Dict (Instance1 NFData h))
     (Comp Dict (Instance1 NFData h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i) (\(Comp Dict) -> h x -> ()
forall a. NFData a => a -> ()
rnf h x
h) (xs :& Comp Dict (Instance1 NFData h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 NFData h))
  {-# INLINE rnf #-}

instance WrapForall Hashable h xs => Hashable (xs :/ h) where
  hashWithSalt :: Int -> (xs :/ h) -> Int
hashWithSalt s :: Int
s (EmbedAt i :: Membership xs x
i h :: h x
h) = Optic'
  (->)
  (Const Int)
  (xs :& Comp Dict (Instance1 Hashable h))
  (Comp Dict (Instance1 Hashable h) x)
-> (Comp Dict (Instance1 Hashable h) x -> Int)
-> (xs :& Comp Dict (Instance1 Hashable h))
-> Int
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const Int)
     (xs :& Comp Dict (Instance1 Hashable h))
     (Comp Dict (Instance1 Hashable h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i)
    (\(Comp Dict) -> Int
s Int -> Membership xs x -> Int
forall a. Hashable a => Int -> a -> Int
`hashWithSalt` Membership xs x
i Int -> h x -> Int
forall a. Hashable a => Int -> a -> Int
`hashWithSalt` h x
h)
    (xs :& Comp Dict (Instance1 Hashable h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Hashable h))
  {-# INLINE hashWithSalt #-}

instance WrapForall TH.Lift h xs => TH.Lift (xs :/ h) where
  lift :: (xs :/ h) -> Q Exp
lift (EmbedAt i :: Membership xs x
i h :: h x
h) = Optic'
  (->)
  (Const (Q Exp))
  (xs :& Comp Dict (Instance1 Lift h))
  (Comp Dict (Instance1 Lift h) x)
-> (Comp Dict (Instance1 Lift h) x -> Q Exp)
-> (xs :& Comp Dict (Instance1 Lift h))
-> Q Exp
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const (Q Exp))
     (xs :& Comp Dict (Instance1 Lift h))
     (Comp Dict (Instance1 Lift h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i)
    (\(Comp Dict) -> Name -> Q Exp
conE 'EmbedAt Q Exp -> Q Exp -> Q Exp
`appE` Membership xs x -> Q Exp
forall t. Lift t => t -> Q Exp
TH.lift Membership xs x
i Q Exp -> Q Exp -> Q Exp
`appE` h x -> Q Exp
forall t. Lift t => t -> Q Exp
TH.lift h x
h)
    (xs :& Comp Dict (Instance1 Lift h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 TH.Lift h))

instance WrapForall Arbitrary h xs => Arbitrary (xs :/ h) where
  arbitrary :: Gen (xs :/ h)
arbitrary = (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
choose (0, Proxy xs -> Int
forall k (xs :: [k]) (proxy :: [k] -> *).
Generate xs =>
proxy xs -> Int
hcount (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)) Gen Int -> (Int -> Gen (xs :/ h)) -> Gen (xs :/ h)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Proxy (Instance1 Arbitrary h)
-> Proxy xs
-> (forall (x :: k).
    Instance1 Arbitrary h x =>
    Membership xs x -> (Int -> Gen (xs :/ h)) -> Int -> Gen (xs :/ h))
-> (Int -> Gen (xs :/ h))
-> Int
-> Gen (xs :/ h)
forall k (c :: k -> Constraint) (xs :: [k])
       (proxy :: (k -> Constraint) -> *) (proxy' :: [k] -> *) r.
Forall c xs =>
proxy c
-> proxy' xs
-> (forall (x :: k). c x => Membership xs x -> r -> r)
-> r
-> r
henumerateFor
      (Proxy (Instance1 Arbitrary h)
forall k (t :: k). Proxy t
Proxy :: Proxy (Instance1 Arbitrary h))
      (Proxy xs
forall k (t :: k). Proxy t
Proxy :: Proxy xs)
      (\m :: Membership xs x
m r :: Int -> Gen (xs :/ h)
r i :: Int
i -> if Int
i Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 0
        then Membership xs x -> h x -> xs :/ h
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> h x -> xs :/ h
EmbedAt Membership xs x
m (h x -> xs :/ h) -> Gen (h x) -> Gen (xs :/ h)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (h x)
forall a. Arbitrary a => Gen a
arbitrary
        else Int -> Gen (xs :/ h)
r (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- 1))
        (String -> Int -> Gen (xs :/ h)
forall a. HasCallStack => String -> a
error "Impossible")
  shrink :: (xs :/ h) -> [xs :/ h]
shrink (EmbedAt i :: Membership xs x
i h :: h x
h) = Optic'
  (->)
  (Const [xs :/ h])
  (xs :& Comp Dict (Instance1 Arbitrary h))
  (Comp Dict (Instance1 Arbitrary h) x)
-> (Comp Dict (Instance1 Arbitrary h) x -> [xs :/ h])
-> (xs :& Comp Dict (Instance1 Arbitrary h))
-> [xs :/ h]
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const [xs :/ h])
     (xs :& Comp Dict (Instance1 Arbitrary h))
     (Comp Dict (Instance1 Arbitrary h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i)
    (\(Comp Dict) -> Membership xs x -> h x -> xs :/ h
forall k (xs :: [k]) (x :: k) (h :: k -> *).
Membership xs x -> h x -> xs :/ h
EmbedAt Membership xs x
i (h x -> xs :/ h) -> [h x] -> [xs :/ h]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> h x -> [h x]
forall a. Arbitrary a => a -> [a]
shrink h x
h)
    (xs :& Comp Dict (Instance1 Arbitrary h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Arbitrary h))

instance WrapForall Pretty h xs => Pretty (xs :/ h) where
  pretty :: (xs :/ h) -> Doc ann
pretty (EmbedAt i :: Membership xs x
i h :: h x
h) = "EmbedAt "
    Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Membership xs x -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Membership xs x
i
    Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> " "
    Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Optic'
  (->)
  (Const (Doc ann))
  (xs :& Comp Dict (Instance1 Pretty h))
  (Comp Dict (Instance1 Pretty h) x)
-> (Comp Dict (Instance1 Pretty h) x -> Doc ann)
-> (xs :& Comp Dict (Instance1 Pretty h))
-> Doc ann
forall r s a. Optic' (->) (Const r) s a -> (a -> r) -> s -> r
views (Membership xs x
-> Optic'
     (->)
     (Const (Doc ann))
     (xs :& Comp Dict (Instance1 Pretty h))
     (Comp Dict (Instance1 Pretty h) x)
forall k (f :: * -> *) (p :: * -> * -> *)
       (t :: [k] -> (k -> *) -> *) (xs :: [k]) (h :: k -> *) (x :: k).
(Extensible f p t, ExtensibleConstr t xs h x) =>
Membership xs x -> Optic' p f (t xs h) (h x)
pieceAt Membership xs x
i) (\(Comp Dict) -> h x -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty h x
h)
    (xs :& Comp Dict (Instance1 Pretty h)
forall i (c :: i -> Constraint) (xs :: [i]).
Forall c xs =>
xs :& Comp Dict c
library :: xs :& Comp Dict (Instance1 Pretty h))

-- | Forall upon a wrapper
type WrapForall c h = Forall (Instance1 c h)

-- | Composition for a class and a wrapper
class c (h x) => Instance1 c h x
instance c (h x) => Instance1 c h x

#ifdef BARBIES
instance FunctorB ((:&) xs) where
  bmap = hmap

instance FunctorB ((:/) xs) where
  bmap = hoist

instance TraversableB ((:&) xs) where
  btraverse = htraverse

instance TraversableB ((:/) xs) where
  btraverse f (EmbedAt i x) = EmbedAt i <$> f x

instance Generate xs => ApplicativeB ((:&) xs) where
  bprod = hzipWith Pair
  bpure = hrepeat

instance ConstraintsB ((:&) xs) where
  type AllB c ((:&) xs) = Forall c xs
  baddDicts = bprod bdicts

instance ConstraintsB ((:/) xs) where
  type AllB c ((:/) xs) = Forall c xs
  baddDicts (EmbedAt i x) = EmbedAt i (Pair (hlookup i bdicts) x)

#endif