packages feed

vessel 0.2.0.0 → 0.2.1.0

raw patch · 8 files changed

+225/−37 lines, 8 filesdep +base-orphansdep ~dependent-sum-aeson-orphansdep ~thesedep ~witherablePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: base-orphans

Dependency ranges changed: dependent-sum-aeson-orphans, these, witherable

API changes (from Hackage documentation)

- Data.Vessel: (:~>) :: k v -> v g -> VSum
- Data.Vessel: -- | A more convenient type to use for extracting results.
- Data.Vessel: DMapV :: MonoidalDMap k (Compose g v) -> DMapV g
- Data.Vessel: FlipAp :: v g -> FlipAp
- Data.Vessel: IdentityV :: g a -> IdentityV
- Data.Vessel: MapV :: MonoidalMap k (g v) -> MapV k v g
- Data.Vessel: SingleV :: g (First (Maybe a)) -> SingleV
- Data.Vessel: SubVessel :: Vessel (SubVesselKey k v) f -> SubVessel
- Data.Vessel: Vessel :: MonoidalDMap k (FlipAp g) -> Vessel
- Data.Vessel: [unDMapV] :: DMapV g -> MonoidalDMap k (Compose g v)
- Data.Vessel: [unFlipAp] :: FlipAp -> v g
- Data.Vessel: [unIdentityV] :: IdentityV -> g a
- Data.Vessel: [unMapV] :: MapV k v g -> MonoidalMap k (g v)
- Data.Vessel: [unSingleV] :: SingleV -> g (First (Maybe a))
- Data.Vessel: [unSubVessel] :: SubVessel -> Vessel (SubVesselKey k v) f
- Data.Vessel: [unVessel] :: Vessel -> MonoidalDMap k (FlipAp g)
- Data.Vessel: alignWithMV :: forall m v f g h. (View v, Applicative m) => (forall a. These (f a) (g a) -> m (h a)) -> v f -> v g -> m (Maybe (v h))
- Data.Vessel: alignWithMaybeV :: forall f g h. (View v, GZipView f g h v) => (forall a. These (f a) (g a) -> Maybe (h a)) -> v f -> v g -> Maybe (v h)
- Data.Vessel: alignWithV :: (View v, GZipView f g h v) => (forall a. These (f a) (g a) -> h a) -> v f -> v g -> v h
- Data.Vessel: buildV :: (GCompare k, Has View k, Applicative m) => Vessel k g -> (forall v. k v -> v g -> m (v h)) -> m (Vessel k h)
- Data.Vessel: class Disperse row
- Data.Vessel: class View v => EmptyView v
- Data.Vessel: class Selectable v k where {
- Data.Vessel: class View (v :: (* -> *) -> *)
- Data.Vessel: collapseNullV :: View v => v f -> Maybe (v f)
- Data.Vessel: condense :: (Disperse row, Align col) => row (col a) -> col (row a)
- Data.Vessel: condenseV :: (View v, GCondenseView t g v) => t (v g) -> v (Compose t g)
- Data.Vessel: cropV :: forall s i r. (View v, GZipView s i r v) => (forall a. s a -> i a -> r a) -> v s -> v i -> Maybe (v r)
- Data.Vessel: data VSum (k :: ((* -> *) -> *) -> *) (g :: * -> *)
- Data.Vessel: disperse :: (Disperse row, Foldable col, Filterable col, Functor col) => col (row a) -> row (col a)
- Data.Vessel: disperseV :: (View v, GDisperseView t g v) => v (Compose t g) -> t (v g)
- Data.Vessel: emptyV :: EmptyView v => v f
- Data.Vessel: fromListV :: (GCompare k, Has View k) => [VSum k g] -> Vessel k g
- Data.Vessel: intersectionWithKeyV :: (GCompare k, Has View k) => (forall v. View v => k v -> v g -> v g' -> v h) -> Vessel k g -> Vessel k g' -> Vessel k h
- Data.Vessel: lookupSubVessel :: Ord k => k -> SubVessel k v f -> Maybe (v f)
- Data.Vessel: lookupV :: GCompare k => k v -> Vessel k g -> Maybe (v g)
- Data.Vessel: mapDecomposedV :: (Functor m, View v) => (v Proxy -> m (v Identity)) -> v (Compose (MonoidalMap c) g) -> m (Maybe (v (Compose (MonoidalMap c) Identity)))
- Data.Vessel: mapMaybeV :: forall f g. (View v, GMapView f g v) => (forall a. f a -> Maybe (g a)) -> v f -> Maybe (v g)
- Data.Vessel: mapMaybeWithKeyV :: (GCompare k, Has View k) => (forall v. View v => k v -> v g -> Maybe (v g')) -> Vessel k g -> Vessel k g'
- Data.Vessel: mapV :: (View v, GMapView f g v) => (forall a. f a -> g a) -> v f -> v g
- Data.Vessel: newtype DMapV (k :: * -> *) (v :: * -> *) g
- Data.Vessel: newtype FlipAp (g :: k) (v :: k -> *)
- Data.Vessel: newtype IdentityV (a :: *) (g :: * -> *)
- Data.Vessel: newtype MapV k v g
- Data.Vessel: newtype SingleV (a :: *) (g :: * -> *)
- Data.Vessel: newtype SubVessel (k :: *) (v :: (* -> *) -> *) (f :: * -> *)
- Data.Vessel: newtype Vessel (k :: ((* -> *) -> *) -> *) (g :: * -> *)
- Data.Vessel: nullV :: forall i. (View v, GMapView i i v) => v i -> Bool
- Data.Vessel: selection :: Selectable v k => k -> v Identity -> Selection v k
- Data.Vessel: selector :: Selectable v k => (forall a. p a) -> k -> v p
- Data.Vessel: singletonSubVessel :: forall k f v. View v => k -> v f -> SubVessel k v f
- Data.Vessel: singletonV :: View v => k v -> v g -> Vessel k g
- Data.Vessel: subtractV :: View v => v f -> v g -> Maybe (v f)
- Data.Vessel: toListV :: Vessel k g -> [VSum k g]
- Data.Vessel: transposeView :: (View v, Foldable t, Filterable t, Functor t, Align t, QueryResult (t (v g)) ~ t (v g'), QueryResult (v (Compose t g)) ~ v (Compose t g'), Monoid (v g), Monoid (v (Compose t g))) => QueryMorphism (t (v g)) (v (Compose t g))
- Data.Vessel: traverseSubVessel :: (Ord k, View v, Applicative m) => (k -> v g -> m (v h)) -> SubVessel k v g -> m (SubVessel k v h)
- Data.Vessel: traverseV :: (View v, GMapView f g v, Applicative m) => (forall a. f a -> m (g a)) -> v f -> m (v g)
- Data.Vessel: traverseWithKeyV :: (GCompare k, Has View k, Applicative m) => (forall v. View v => k v -> v g -> m (v h)) -> Vessel k g -> m (Vessel k h)
- Data.Vessel: traverseWithKeyV_ :: (GCompare k, Has View k, Applicative m) => (forall v. View v => k v -> v g -> m ()) -> Vessel k g -> m ()
- Data.Vessel: type family Selection v k;
- Data.Vessel: }
- Data.Vessel.Class: alignWithMV :: forall m v f g h. (View v, Applicative m) => (forall a. These (f a) (g a) -> m (h a)) -> v f -> v g -> m (Maybe (v h))
- Data.Vessel.Class: alignWithMaybeV :: forall f g h. (View v, GZipView f g h v) => (forall a. These (f a) (g a) -> Maybe (h a)) -> v f -> v g -> Maybe (v h)
- Data.Vessel.Class: alignWithV :: (View v, GZipView f g h v) => (forall a. These (f a) (g a) -> h a) -> v f -> v g -> v h
- Data.Vessel.Class: class (Foldable t, Filterable t, Functor t) => CondenseView t vf vtf
- Data.Vessel.Class: class Align t => DisperseView t vf vtf
- Data.Vessel.Class: class Empty1 a
- Data.Vessel.Class: class View v => EmptyView v
- Data.Vessel.Class: class MapView f g vf vg
- Data.Vessel.Class: class View (v :: (* -> *) -> *)
- Data.Vessel.Class: class ZipView f g h vf vg vh
- Data.Vessel.Class: collapseNullV :: View v => v f -> Maybe (v f)
- Data.Vessel.Class: condenseV :: (View v, GCondenseView t g v) => t (v g) -> v (Compose t g)
- Data.Vessel.Class: condenseView :: CondenseView t vf vtf => t (vf p) -> vtf p
- Data.Vessel.Class: cropV :: forall s i r. (View v, GZipView s i r v) => (forall a. s a -> i a -> r a) -> v s -> v i -> Maybe (v r)
- Data.Vessel.Class: disperseV :: (View v, GDisperseView t g v) => v (Compose t g) -> t (v g)
- Data.Vessel.Class: disperseView :: DisperseView t vf vtf => vtf p -> t (vf p)
- Data.Vessel.Class: empty :: Empty1 a => a p
- Data.Vessel.Class: emptyV :: EmptyView v => v f
- Data.Vessel.Class: filterV :: View v => (forall a. f a -> Bool) -> v f -> Maybe (v f)
- Data.Vessel.Class: instance (Data.Foldable.Foldable t, Data.Witherable.Filterable t, GHC.Base.Functor t) => Data.Vessel.Class.CondenseView t GHC.Generics.U1 GHC.Generics.U1
- Data.Vessel.Class: instance (Data.Vessel.Class.MapView f g avf avg, Data.Vessel.Class.MapView f g bvf bvg) => Data.Vessel.Class.MapView f g (avf GHC.Generics.:*: bvf) (avg GHC.Generics.:*: bvg)
- Data.Vessel.Class: instance (Data.Vessel.Class.View v, Data.Foldable.Foldable t, Data.Witherable.Filterable t, GHC.Base.Functor t) => Data.Vessel.Class.CondenseView t (GHC.Generics.K1 i (v f)) (GHC.Generics.K1 i (v (Data.Functor.Compose.Compose t f)))
- Data.Vessel.Class: instance (Data.Vessel.Class.View v, Data.Semialign.Internal.Align t) => Data.Vessel.Class.DisperseView t (GHC.Generics.K1 i (v f)) (GHC.Generics.K1 i (v (Data.Functor.Compose.Compose t f)))
- Data.Vessel.Class: instance (Data.Vessel.Class.View v, Data.Vessel.Class.EmptyView v) => Data.Vessel.Class.MapView f g (GHC.Generics.K1 i (v f)) (GHC.Generics.K1 i (v g))
- Data.Vessel.Class: instance (Data.Vessel.Class.View v, Data.Vessel.Class.EmptyView v) => Data.Vessel.Class.ZipView f g h (GHC.Generics.K1 i (v f)) (GHC.Generics.K1 i (v g)) (GHC.Generics.K1 i (v h))
- Data.Vessel.Class: instance (Data.Vessel.Class.ZipView f g h avf avg avh, Data.Vessel.Class.ZipView f g h bvf bvg bvh) => Data.Vessel.Class.ZipView f g h (avf GHC.Generics.:*: bvf) (avg GHC.Generics.:*: bvg) (avh GHC.Generics.:*: bvh)
- Data.Vessel.Class: instance Data.GADT.Internal.GCompare k => Data.Vessel.Class.EmptyView (Data.Dependent.Map.Monoidal.MonoidalDMap k)
- Data.Vessel.Class: instance Data.GADT.Internal.GCompare k => Data.Vessel.Class.View (Data.Dependent.Map.Monoidal.MonoidalDMap k)
- Data.Vessel.Class: instance Data.Semialign.Internal.Align t => Data.Vessel.Class.DisperseView t GHC.Generics.U1 GHC.Generics.U1
- Data.Vessel.Class: instance Data.Vessel.Class.Empty1 GHC.Generics.U1
- Data.Vessel.Class: instance Data.Vessel.Class.EmptyView v => Data.Vessel.Class.Empty1 (GHC.Generics.K1 i (v f))
- Data.Vessel.Class: instance Data.Vessel.Class.MapView f g GHC.Generics.U1 GHC.Generics.U1
- Data.Vessel.Class: instance Data.Vessel.Class.MapView f g GHC.Generics.V1 GHC.Generics.V1
- Data.Vessel.Class: instance Data.Vessel.Class.MapView f g vf vg => Data.Vessel.Class.MapView f g (GHC.Generics.M1 i t vf) (GHC.Generics.M1 i t vg)
- Data.Vessel.Class: instance Data.Vessel.Class.View Data.Proxy.Proxy
- Data.Vessel.Class: instance Data.Vessel.Class.ZipView f g h GHC.Generics.U1 GHC.Generics.U1 GHC.Generics.U1
- Data.Vessel.Class: instance Data.Vessel.Class.ZipView f g h GHC.Generics.V1 GHC.Generics.V1 GHC.Generics.V1
- Data.Vessel.Class: instance Data.Vessel.Class.ZipView f g h vf vg vh => Data.Vessel.Class.ZipView f g h (GHC.Generics.M1 i t vf) (GHC.Generics.M1 i t vg) (GHC.Generics.M1 i t vh)
- Data.Vessel.Class: instance forall k (a :: k -> *) (b :: k -> *). (Data.Vessel.Class.Empty1 a, Data.Vessel.Class.Empty1 b) => Data.Vessel.Class.Empty1 (a GHC.Generics.:*: b)
- Data.Vessel.Class: instance forall k (a :: k -> *) i (t :: GHC.Generics.Meta). Data.Vessel.Class.Empty1 a => Data.Vessel.Class.Empty1 (GHC.Generics.M1 i t a)
- Data.Vessel.Class: instance forall k (t :: * -> *) (avf :: k -> *) (avtf :: k -> *) (bvf :: k -> *) (bvtf :: k -> *). (Data.Vessel.Class.CondenseView t avf avtf, Data.Vessel.Class.CondenseView t bvf bvtf, Data.Vessel.Class.Empty1 avf, Data.Vessel.Class.Empty1 bvf) => Data.Vessel.Class.CondenseView t (avf GHC.Generics.:*: bvf) (avtf GHC.Generics.:*: bvtf)
- Data.Vessel.Class: instance forall k (t :: * -> *) (avf :: k -> *) (avtf :: k -> *) (bvf :: k -> *) (bvtf :: k -> *). (Data.Vessel.Class.DisperseView t avf avtf, Data.Vessel.Class.DisperseView t bvf bvtf, Data.Vessel.Class.Empty1 avf, Data.Vessel.Class.Empty1 bvf) => Data.Vessel.Class.DisperseView t (avf GHC.Generics.:*: bvf) (avtf GHC.Generics.:*: bvtf)
- Data.Vessel.Class: instance forall k (t :: * -> *) (vf :: k -> *) (vtf :: k -> *) i (t' :: GHC.Generics.Meta). Data.Vessel.Class.CondenseView t vf vtf => Data.Vessel.Class.CondenseView t (GHC.Generics.M1 i t' vf) (GHC.Generics.M1 i t' vtf)
- Data.Vessel.Class: instance forall k (t :: * -> *) (vf :: k -> *) (vtf :: k -> *) i (t' :: GHC.Generics.Meta). Data.Vessel.Class.DisperseView t vf vtf => Data.Vessel.Class.DisperseView t (GHC.Generics.M1 i t' vf) (GHC.Generics.M1 i t' vtf)
- Data.Vessel.Class: mapDecomposedV :: (Functor m, View v) => (v Proxy -> m (v Identity)) -> v (Compose (MonoidalMap c) g) -> m (Maybe (v (Compose (MonoidalMap c) Identity)))
- Data.Vessel.Class: mapMaybeV :: forall f g. (View v, GMapView f g v) => (forall a. f a -> Maybe (g a)) -> v f -> Maybe (v g)
- Data.Vessel.Class: mapV :: (View v, GMapView f g v) => (forall a. f a -> g a) -> v f -> v g
- Data.Vessel.Class: mapView :: MapView f g vf vg => (forall v'. (View v', EmptyView v') => v' f -> v' g) -> vf p -> vg p
- Data.Vessel.Class: mapViewM :: (MapView f g vf vg, Applicative m) => (forall v'. (View v', EmptyView v') => v' f -> m (v' g)) -> vf p -> m (vg p)
- Data.Vessel.Class: maybeEmptyView :: View v => v f -> Maybe (v f)
- Data.Vessel.Class: nullV :: forall i. (View v, GMapView i i v) => v i -> Bool
- Data.Vessel.Class: subtractV :: View v => v f -> v g -> Maybe (v f)
- Data.Vessel.Class: transposeView :: (View v, Foldable t, Filterable t, Functor t, Align t, QueryResult (t (v g)) ~ t (v g'), QueryResult (v (Compose t g)) ~ v (Compose t g'), Monoid (v g), Monoid (v (Compose t g))) => QueryMorphism (t (v g)) (v (Compose t g))
- Data.Vessel.Class: traverseV :: (View v, GMapView f g v, Applicative m) => (forall a. f a -> m (g a)) -> v f -> m (v g)
- Data.Vessel.Class: type GCondenseView t f v = (Generic (v f), Generic (v (Compose t f)), CondenseView t (Rep (v f)) (Rep (v (Compose t f))))
- Data.Vessel.Class: type GDisperseView t f v = (Generic (v f), Generic (v (Compose t f)), DisperseView t (Rep (v f)) (Rep (v (Compose t f))))
- Data.Vessel.Class: type GMapView f g v = (Generic (v f), Generic (v g), MapView f g (Rep (v f)) (Rep (v g)))
- Data.Vessel.Class: type GZipView f g h v = (Generic (v f), Generic (v g), Generic (v h), ZipView f g h (Rep (v f)) (Rep (v g)) (Rep (v h)))
- Data.Vessel.Class: zipView :: ZipView f g h vf vg vh => (forall v'. (View v', EmptyView v') => v' f -> v' g -> v' h) -> vf p -> vg p -> vh p
- Data.Vessel.Class: zipViewM :: (ZipView f g h vf vg vh, Applicative m) => (forall v'. (View v', EmptyView v') => v' f -> v' g -> m (v' h)) -> vf p -> vg p -> m (vh p)
- Data.Vessel.DependentMap: DMapV :: MonoidalDMap k (Compose g v) -> DMapV g
- Data.Vessel.DependentMap: [unDMapV] :: DMapV g -> MonoidalDMap k (Compose g v)
- Data.Vessel.DependentMap: instance (Data.Constraint.Extras.Has' Data.Aeson.Types.FromJSON.FromJSON k (Data.Functor.Compose.Compose g v), Data.Aeson.Types.FromJSON.FromJSON (Data.Some.Newtype.Some k), Data.GADT.Internal.GCompare k) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.Constraint.Extras.Has' Data.Aeson.Types.ToJSON.ToJSON k (Data.Functor.Compose.Compose g v), Data.Constraint.Forall.ForallF Data.Aeson.Types.ToJSON.ToJSON k) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.Constraint.Forall.ForallF GHC.Show.Show k, Data.Constraint.Extras.Has' GHC.Show.Show k (Data.Functor.Compose.Compose g v)) => GHC.Show.Show (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Functor.Compose.Compose g v)) => GHC.Base.Semigroup (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' GHC.Base.Monoid k (Data.Functor.Compose.Compose g v)) => GHC.Base.Monoid (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' GHC.Base.Monoid k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' Data.Patch.Group k (Data.Functor.Compose.Compose g v)) => Data.Patch.Group (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' GHC.Base.Monoid k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' Data.Patch.Group k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' Data.Patch.Additive k (Data.Functor.Compose.Compose g v)) => Data.Patch.Additive (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Classes.Eq k (Data.Functor.Compose.Compose g v)) => GHC.Classes.Eq (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Classes.Eq k (Data.Functor.Compose.Compose g v), Data.Constraint.Extras.Has' GHC.Classes.Ord k (Data.Functor.Compose.Compose g v)) => GHC.Classes.Ord (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: instance Data.GADT.Internal.GCompare k => Data.Vessel.Class.EmptyView (Data.Vessel.DependentMap.DMapV k v)
- Data.Vessel.DependentMap: instance Data.GADT.Internal.GCompare k => Data.Vessel.Class.View (Data.Vessel.DependentMap.DMapV k v)
- Data.Vessel.DependentMap: instance Data.GADT.Internal.GCompare k => Data.Vessel.Selectable.Selectable (Data.Vessel.DependentMap.DMapV k v) (Data.Set.Internal.Set (Data.Some.Newtype.Some k))
- Data.Vessel.DependentMap: instance GHC.Generics.Generic (Data.Vessel.DependentMap.DMapV k v g)
- Data.Vessel.DependentMap: newtype DMapV (k :: * -> *) (v :: * -> *) g
- Data.Vessel.Disperse: class Disperse row
- Data.Vessel.Disperse: condense :: (Disperse row, Align col) => row (col a) -> col (row a)
- Data.Vessel.Disperse: disperse :: (Disperse row, Foldable col, Filterable col, Functor col) => col (row a) -> row (col a)
- Data.Vessel.Disperse: instance GHC.Classes.Ord k => Data.Vessel.Disperse.Disperse (Data.Map.Monoidal.MonoidalMap k)
- Data.Vessel.Identity: IdentityV :: g a -> IdentityV
- Data.Vessel.Identity: [unIdentityV] :: IdentityV -> g a
- Data.Vessel.Identity: fromIdentityV :: (Applicative m, Applicative n) => ViewHalfMorphism m n (IdentityV a (Const g)) (Const g a)
- Data.Vessel.Identity: handleIdentityVSelector :: forall a f g m. Functor m => (forall x. x -> f x -> g x) -> m a -> IdentityV a f -> m (IdentityV a g)
- Data.Vessel.Identity: identityV :: (Applicative m, Applicative n) => ViewMorphism m n (Const g a) (IdentityV a (Const g))
- Data.Vessel.Identity: instance Data.Aeson.Types.FromJSON.FromJSON (g a) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance Data.Aeson.Types.ToJSON.ToJSON (g a) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance Data.Patch.Group (g a) => Data.Patch.Group (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance Data.Vessel.Class.View (Data.Vessel.Identity.IdentityV a)
- Data.Vessel.Identity: instance Data.Vessel.Selectable.Selectable (Data.Vessel.Identity.IdentityV a) ()
- Data.Vessel.Identity: instance GHC.Base.Monoid (g a) => GHC.Base.Monoid (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Base.Semigroup (g a) => Data.Patch.Additive (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Base.Semigroup (g a) => GHC.Base.Semigroup (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Classes.Eq (g a) => GHC.Classes.Eq (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Classes.Ord (g a) => GHC.Classes.Ord (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Generics.Generic (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Read.Read (g a) => GHC.Read.Read (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: instance GHC.Show.Show (g a) => GHC.Show.Show (Data.Vessel.Identity.IdentityV a g)
- Data.Vessel.Identity: lookupIdentityV :: IdentityV a Identity -> a
- Data.Vessel.Identity: mapIdentityV :: (f a -> g a) -> IdentityV a f -> IdentityV a g
- Data.Vessel.Identity: newtype IdentityV (a :: *) (g :: * -> *)
- Data.Vessel.Identity: toIdentityV :: (Applicative m, Applicative n) => ViewHalfMorphism m n (Const g a) (IdentityV a (Const g))
- Data.Vessel.Internal: (:~>) :: k v -> v g -> VSum
- Data.Vessel.Internal: DThat :: g a -> DThese f g a
- Data.Vessel.Internal: DThese :: f a -> g a -> DThese f g a
- Data.Vessel.Internal: DThis :: f a -> DThese f g a
- Data.Vessel.Internal: FlipAp :: v g -> FlipAp
- Data.Vessel.Internal: None :: Pivot k a
- Data.Vessel.Internal: NoneD :: PivotD
- Data.Vessel.Internal: One :: k -> a -> Pivot k a
- Data.Vessel.Internal: OneD :: k v -> g v -> PivotD
- Data.Vessel.Internal: Split :: k -> MonoidalMap k a -> MonoidalMap k a -> Pivot k a
- Data.Vessel.Internal: SplitD :: k v -> DMap k g -> DMap k g -> PivotD
- Data.Vessel.Internal: [unFlipAp] :: FlipAp -> v g
- Data.Vessel.Internal: alignWithKeyDMap :: GCompare k => (forall a. k a -> These (f a) (g a) -> h a) -> DMap k f -> DMap k g -> DMap k h
- Data.Vessel.Internal: alignWithKeyMaybeDMap :: GCompare k => (forall a. k a -> These (f a) (g a) -> Maybe (h a)) -> DMap k f -> DMap k g -> DMap k h
- Data.Vessel.Internal: alignWithKeyMaybeMonoidalDMap :: GCompare k => (forall a. k a -> These (f a) (g a) -> Maybe (h a)) -> MonoidalDMap k f -> MonoidalDMap k g -> MonoidalDMap k h
- Data.Vessel.Internal: alignWithKeyMonoidalDMap :: GCompare k => (forall a. k a -> These (f a) (g a) -> h a) -> MonoidalDMap k f -> MonoidalDMap k g -> MonoidalDMap k h
- Data.Vessel.Internal: assocLCompose :: Functor f => Compose f (Compose g h) x -> Compose (Compose f g) h x
- Data.Vessel.Internal: assocRCompose :: Functor f => Compose (Compose f g) h x -> Compose f (Compose g h) x
- Data.Vessel.Internal: condenseD' :: (GCompare k, Foldable t, Filterable t) => DMap k g -> t (MonoidalDMap k g) -> MonoidalDMap k (Compose t g)
- Data.Vessel.Internal: curryMMap :: (Ord a, Ord b) => MonoidalMap (a, b) c -> MonoidalMap a (MonoidalMap b c)
- Data.Vessel.Internal: data DThese f g a
- Data.Vessel.Internal: data Pivot k a
- Data.Vessel.Internal: data PivotD (k :: l -> *) (g :: l -> *)
- Data.Vessel.Internal: data VSum (k :: ((* -> *) -> *) -> *) (g :: * -> *)
- Data.Vessel.Internal: dtheseToThese :: DThese f g a -> These (f a) (g a)
- Data.Vessel.Internal: findPivot :: Ord k => MonoidalMap k a -> Pivot k a
- Data.Vessel.Internal: findPivotD :: GCompare k => DMap k g -> PivotD k g
- Data.Vessel.Internal: instance (Data.Aeson.Types.FromJSON.FromJSON (Data.Some.Newtype.Some k), Data.Constraint.Extras.HasV Data.Aeson.Types.FromJSON.FromJSON k g) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.Internal.VSum k g)
- Data.Vessel.Internal: instance (Data.Constraint.Forall.ForallF Data.Aeson.Types.ToJSON.ToJSON k, Data.Constraint.Extras.HasV Data.Aeson.Types.ToJSON.ToJSON k g) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.Internal.VSum k g)
- Data.Vessel.Internal: instance (GHC.Classes.Eq k, GHC.Classes.Eq a) => GHC.Classes.Eq (Data.Vessel.Internal.Pivot k a)
- Data.Vessel.Internal: instance (GHC.Classes.Ord k, GHC.Classes.Ord a) => GHC.Classes.Ord (Data.Vessel.Internal.Pivot k a)
- Data.Vessel.Internal: instance (GHC.Show.Show k, GHC.Show.Show a) => GHC.Show.Show (Data.Vessel.Internal.Pivot k a)
- Data.Vessel.Internal: instance forall k (f :: k -> *) (g :: k -> *). (Data.Constraint.Extras.Has' Data.Patch.Group f g, Data.Constraint.Extras.Has' GHC.Base.Semigroup f g, Data.GADT.Internal.GCompare f) => Data.Patch.Additive (Data.Dependent.Map.Monoidal.MonoidalDMap f g)
- Data.Vessel.Internal: instance forall k (f :: k -> *) (g :: k -> *). (Data.Constraint.Extras.Has' Data.Patch.Group f g, Data.Constraint.Extras.Has' GHC.Base.Semigroup f g, Data.GADT.Internal.GCompare f) => Data.Patch.Group (Data.Dependent.Map.Monoidal.MonoidalDMap f g)
- Data.Vessel.Internal: instance forall k (g :: k) (v :: k -> *). GHC.Classes.Eq (v g) => GHC.Classes.Eq (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (g :: k) (v :: k -> *). GHC.Classes.Ord (v g) => GHC.Classes.Ord (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (g :: k) (v :: k -> *). GHC.Show.Show (v g) => GHC.Show.Show (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (v :: k -> *) (g :: k). Data.Patch.Additive (v g) => Data.Patch.Additive (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (v :: k -> *) (g :: k). Data.Patch.Group (v g) => Data.Patch.Group (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (v :: k -> *) (g :: k). GHC.Base.Monoid (v g) => GHC.Base.Monoid (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k (v :: k -> *) (g :: k). GHC.Base.Semigroup (v g) => GHC.Base.Semigroup (Data.Vessel.Internal.FlipAp g v)
- Data.Vessel.Internal: instance forall k1 k (f :: k -> *) (g :: k1 -> k) (a :: k1). Data.Patch.Additive (f (g a)) => Data.Patch.Additive (Data.Functor.Compose.Compose f g a)
- Data.Vessel.Internal: instance forall k1 k (f :: k -> *) (g :: k1 -> k) (a :: k1). GHC.Base.Monoid (f (g a)) => GHC.Base.Monoid (Data.Functor.Compose.Compose f g a)
- Data.Vessel.Internal: instance forall k1 k (f :: k -> *) (g :: k1 -> k) (a :: k1). GHC.Base.Semigroup (f (g a)) => GHC.Base.Semigroup (Data.Functor.Compose.Compose f g a)
- Data.Vessel.Internal: instance forall k1 k (f :: k -> *) (g :: k1 -> k) (x :: k1). Data.Patch.Group (f (g x)) => Data.Patch.Group (Data.Functor.Compose.Compose f g x)
- Data.Vessel.Internal: leftOuterJoin :: Ord k => (a -> c) -> (a -> b -> c) -> MonoidalMap k a -> MonoidalMap k b -> MonoidalMap k c
- Data.Vessel.Internal: leftOuterJoin' :: Ord k => (a -> c) -> (a -> b -> c) -> Map k a -> Map k b -> Map k c
- Data.Vessel.Internal: leftOuterJoin_ :: Ord k => a -> Set k -> MonoidalMap k a -> MonoidalMap k a
- Data.Vessel.Internal: newtype FlipAp (g :: k) (v :: k -> *)
- Data.Vessel.Internal: splitD :: (GCompare k, Filterable t) => k x -> t (MonoidalDMap k g) -> (t (MonoidalDMap k g), t (MonoidalDMap k g))
- Data.Vessel.Internal: splitLT :: Ord k => k -> MonoidalMap k a -> (MonoidalMap k a, MonoidalMap k a)
- Data.Vessel.Internal: splitLTD :: GCompare k => k v -> MonoidalDMap k g -> (MonoidalDMap k g, MonoidalDMap k g)
- Data.Vessel.Internal: splitOneD :: GCompare k => k v -> MonoidalDMap k g -> Maybe (These (MonoidalDMap k g) (MonoidalDMap k g))
- Data.Vessel.Internal: theseToDThese :: These (f a) (g a) -> DThese f g a
- Data.Vessel.Internal: unalignProperly :: Filterable f => f (These a b) -> (f a, f b)
- Data.Vessel.Internal: uncurryMMap :: (Ord a, Ord b) => MonoidalMap a (MonoidalMap b c) -> MonoidalMap (a, b) c
- Data.Vessel.Internal: unionDistinctAsc :: Ord k => MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a
- Data.Vessel.Internal: unionDistinctAscD :: GCompare k => MonoidalDMap k g -> MonoidalDMap k g -> MonoidalDMap k g
- Data.Vessel.Map: MapV :: MonoidalMap k (g v) -> MapV k v g
- Data.Vessel.Map: [unMapV] :: MapV k v g -> MonoidalMap k (g v)
- Data.Vessel.Map: fromMapVMorphism :: (Alternative m, Applicative n, Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v) => k -> ViewHalfMorphism m n (MapV k v g) (g v)
- Data.Vessel.Map: fromMapVSetMorphism :: (Alternative m, Applicative n, Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v, Monoid (g v)) => Set k -> ViewHalfMorphism m n (MapV k v g) (g v)
- Data.Vessel.Map: fromMapVWildcardMorphism :: (Alternative m, Applicative n, Semigroup (g v)) => ViewHalfMorphism m n (MapV k v g) (g v)
- Data.Vessel.Map: handleMapVSelector :: forall a f g k m. (Ord k, Functor m) => (forall x. x -> f x -> g x) -> (Set k -> m (MonoidalMap k a)) -> MapV k a f -> m (MapV k a g)
- Data.Vessel.Map: instance (GHC.Base.Semigroup v, GHC.Classes.Ord k) => GHC.Base.Monoid (Data.Vessel.Map.MapV k v Data.Functor.Identity.Identity)
- Data.Vessel.Map: instance (GHC.Base.Semigroup v, GHC.Classes.Ord k) => GHC.Base.Semigroup (Data.Vessel.Map.MapV k v Data.Functor.Identity.Identity)
- Data.Vessel.Map: instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, GHC.Base.Semigroup v) => GHC.Base.Semigroup (Data.Vessel.Map.MapV k1 v (Data.Functor.Compose.Compose (Data.Map.Monoidal.MonoidalMap k2) Data.Functor.Identity.Identity))
- Data.Vessel.Map: instance GHC.Classes.Ord k => Data.Vessel.Class.EmptyView (Data.Vessel.Map.MapV k v)
- Data.Vessel.Map: instance GHC.Classes.Ord k => Data.Vessel.Class.View (Data.Vessel.Map.MapV k v)
- Data.Vessel.Map: instance GHC.Classes.Ord k => Data.Vessel.Selectable.Selectable (Data.Vessel.Map.MapV k v) (Data.Functor.Identity.Identity k)
- Data.Vessel.Map: instance GHC.Classes.Ord k => Data.Vessel.Selectable.Selectable (Data.Vessel.Map.MapV k v) (Data.Set.Internal.Set k)
- Data.Vessel.Map: instance forall k k1 k2 g (v :: k). (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Patch.Additive g, Data.Patch.Group g, GHC.Classes.Eq g) => Data.Patch.Additive (Data.Vessel.Map.MapV k1 v (Data.Functor.Compose.Compose (Data.Map.Monoidal.MonoidalMap k2) (Data.Functor.Const.Const g)))
- Data.Vessel.Map: instance forall k k1 k2 g (v :: k). (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Patch.Group g, GHC.Classes.Eq g) => Data.Patch.Group (Data.Vessel.Map.MapV k1 v (Data.Functor.Compose.Compose (Data.Map.Monoidal.MonoidalMap k2) (Data.Functor.Const.Const g)))
- Data.Vessel.Map: instance forall k k1 k2 g (v :: k). (GHC.Classes.Ord k1, GHC.Classes.Ord k2, GHC.Base.Monoid g, GHC.Classes.Eq g) => GHC.Base.Monoid (Data.Vessel.Map.MapV k1 v (Data.Functor.Compose.Compose (Data.Map.Monoidal.MonoidalMap k2) (Data.Functor.Const.Const g)))
- Data.Vessel.Map: instance forall k k1 k2 g (v :: k). (GHC.Classes.Ord k1, GHC.Classes.Ord k2, GHC.Base.Monoid g, GHC.Classes.Eq g) => GHC.Base.Semigroup (Data.Vessel.Map.MapV k1 v (Data.Functor.Compose.Compose (Data.Map.Monoidal.MonoidalMap k2) (Data.Functor.Const.Const g)))
- Data.Vessel.Map: instance forall k1 k2 (g :: k1 -> *) (v :: k1). (Data.Aeson.Types.FromJSON.FromJSONKey k2, Data.Aeson.Types.FromJSON.FromJSON (g v), GHC.Classes.Ord k2) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.Map.MapV k2 v g)
- Data.Vessel.Map: instance forall k1 k2 (g :: k1 -> *) (v :: k1). (Data.Aeson.Types.ToJSON.ToJSONKey k2, Data.Aeson.Types.ToJSON.ToJSON (g v), GHC.Classes.Ord k2) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.Map.MapV k2 v g)
- Data.Vessel.Map: instance forall k1 k2 (v :: k2) (g :: k2 -> *). (GHC.Classes.Eq k1, GHC.Classes.Eq (g v)) => GHC.Classes.Eq (Data.Vessel.Map.MapV k1 v g)
- Data.Vessel.Map: instance forall k1 k2 (v :: k2) (g :: k2 -> *). (GHC.Classes.Ord k1, GHC.Classes.Ord (g v)) => GHC.Classes.Ord (Data.Vessel.Map.MapV k1 v g)
- Data.Vessel.Map: instance forall k1 k2 (v :: k2) (g :: k2 -> *). (GHC.Classes.Ord k1, GHC.Read.Read k1, GHC.Read.Read (g v)) => GHC.Read.Read (Data.Vessel.Map.MapV k1 v g)
- Data.Vessel.Map: instance forall k1 k2 (v :: k2) (g :: k2 -> *). (GHC.Show.Show k1, GHC.Show.Show (g v)) => GHC.Show.Show (Data.Vessel.Map.MapV k1 v g)
- Data.Vessel.Map: instance forall k1 k2 (v :: k2) (g :: k2 -> *). GHC.Generics.Generic (Data.Vessel.Map.MapV k1 v g)
- Data.Vessel.Map: instance forall k1 k2 g (v :: k1). (GHC.Classes.Ord k2, GHC.Classes.Eq g, Data.Patch.Group g) => Data.Patch.Group (Data.Vessel.Map.MapV k2 v (Data.Functor.Const.Const g))
- Data.Vessel.Map: instance forall k1 k2 g (v :: k1). (GHC.Classes.Ord k2, GHC.Classes.Eq g, Data.Patch.Group g, Data.Patch.Additive g) => Data.Patch.Additive (Data.Vessel.Map.MapV k2 v (Data.Functor.Const.Const g))
- Data.Vessel.Map: instance forall k1 k2 g (v :: k1). (GHC.Classes.Ord k2, GHC.Classes.Eq g, GHC.Base.Monoid g) => GHC.Base.Monoid (Data.Vessel.Map.MapV k2 v (Data.Functor.Const.Const g))
- Data.Vessel.Map: instance forall k1 k2 g (v :: k1). (GHC.Classes.Ord k2, GHC.Classes.Eq g, GHC.Base.Monoid g) => GHC.Base.Semigroup (Data.Vessel.Map.MapV k2 v (Data.Functor.Const.Const g))
- Data.Vessel.Map: lookupMapV :: Ord k => k -> MapV k v g -> Maybe (g v)
- Data.Vessel.Map: mapMapWithKeyV :: (k -> f a -> g a) -> MapV k a f -> MapV k a g
- Data.Vessel.Map: mapVMorphism :: (Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v, Alternative n, Applicative m) => k -> ViewMorphism m n (g v) (MapV k v g)
- Data.Vessel.Map: mapVSetMorphism :: (Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v, Monoid (ViewQueryResult g v), Monoid (g v), Alternative n, Applicative m) => Set k -> ViewMorphism m n (g v) (MapV k v g)
- Data.Vessel.Map: mapVWildcardMorphism :: (Semigroup (g v), Semigroup (ViewQueryResult g v), ViewQueryResult (g v) ~ ViewQueryResult g v, Alternative n, Applicative m) => ViewMorphism m n (g v) (MapV k v g)
- Data.Vessel.Map: newtype MapV k v g
- Data.Vessel.Map: singletonMapV :: k -> g v -> MapV k v g
- Data.Vessel.Map: toMapVMorphism :: (Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v, Alternative n, Applicative m) => k -> ViewHalfMorphism m n (g v) (MapV k v g)
- Data.Vessel.Map: toMapVSetMorphism :: (Ord k, ViewQueryResult (g v) ~ ViewQueryResult g v, Applicative n, Applicative m, Monoid (ViewQueryResult g v)) => Set k -> ViewHalfMorphism m n (g v) (MapV k v g)
- Data.Vessel.Map: toMapVWildcardMorphism :: (Applicative m, Alternative n, Semigroup (ViewQueryResult g v), ViewQueryResult (g v) ~ ViewQueryResult g v) => ViewHalfMorphism m n (g v) (MapV k v g)
- Data.Vessel.Selectable: -- | A more convenient type to use for extracting results.
- Data.Vessel.Selectable: class Selectable v k where {
- Data.Vessel.Selectable: selection :: Selectable v k => k -> v Identity -> Selection v k
- Data.Vessel.Selectable: selector :: Selectable v k => (forall a. p a) -> k -> v p
- Data.Vessel.Selectable: type family Selection v k;
- Data.Vessel.Selectable: }
- Data.Vessel.Single: SingleV :: g (First (Maybe a)) -> SingleV
- Data.Vessel.Single: [unSingleV] :: SingleV -> g (First (Maybe a))
- Data.Vessel.Single: fromSingleV :: (Applicative m, Applicative n) => ViewHalfMorphism m n (SingleV a (Const g)) (Const g (Maybe a))
- Data.Vessel.Single: handleSingleVSelector :: forall a f g m. Functor m => (forall x. x -> f x -> g x) -> m (First (Maybe a)) -> SingleV a f -> m (SingleV a g)
- Data.Vessel.Single: instance Data.Aeson.Types.FromJSON.FromJSON (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance Data.Aeson.Types.ToJSON.ToJSON (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance Data.Patch.Additive (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => Data.Patch.Additive (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance Data.Patch.Group (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => Data.Patch.Group (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance Data.Vessel.Class.View (Data.Vessel.Single.SingleV a)
- Data.Vessel.Single: instance Data.Vessel.Selectable.Selectable (Data.Vessel.Single.SingleV a) ()
- Data.Vessel.Single: instance GHC.Base.Monoid (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Base.Monoid (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Base.Semigroup (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Base.Semigroup (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Classes.Eq (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Classes.Eq (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Classes.Ord (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Classes.Ord (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Generics.Generic (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Read.Read (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Read.Read (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: instance GHC.Show.Show (g (Data.Semigroup.First (GHC.Maybe.Maybe a))) => GHC.Show.Show (Data.Vessel.Single.SingleV a g)
- Data.Vessel.Single: lookupSingleV :: SingleV a Identity -> Maybe a
- Data.Vessel.Single: mapSingleV :: (f (First (Maybe a)) -> g (First (Maybe a))) -> SingleV a f -> SingleV a g
- Data.Vessel.Single: newtype SingleV (a :: *) (g :: * -> *)
- Data.Vessel.Single: singleV :: (Applicative m, Applicative n) => ViewMorphism m n (Const g (Maybe a)) (SingleV a (Const g))
- Data.Vessel.Single: toSingleV :: (Applicative m, Applicative n) => ViewHalfMorphism m n (Const g (Maybe a)) (SingleV a (Const g))
- Data.Vessel.SubVessel: SubVessel :: Vessel (SubVesselKey k v) f -> SubVessel
- Data.Vessel.SubVessel: [SubVesselKey] :: k -> SubVesselKey k f f
- Data.Vessel.SubVessel: [unSubVessel] :: SubVessel -> Vessel (SubVesselKey k v) f
- Data.Vessel.SubVessel: condenseVMMap :: forall k v g. View v => MonoidalMap k (v g) -> v (Compose (MonoidalMap k) g)
- Data.Vessel.SubVessel: currySubVessel :: (Ord k1, Ord k2) => SubVessel (k1, k2) v f -> MonoidalMap k1 (SubVessel k2 v f)
- Data.Vessel.SubVessel: data SubVesselKey k (f :: (* -> *) -> *) (g :: (* -> *) -> *)
- Data.Vessel.SubVessel: fromSubVessel :: (Ord k, Alternative m, Applicative n, View v, ViewQueryResult (v g) ~ v (ViewQueryResult g)) => k -> ViewHalfMorphism m n (SubVessel k v g) (v g)
- Data.Vessel.SubVessel: fromSubVesselWildcard :: (Ord k, Alternative m, Applicative n, Semigroup (v g)) => ViewHalfMorphism m n (SubVessel k v g) (v g)
- Data.Vessel.SubVessel: fromSubVessels :: (Ord k, Applicative m, View v, Alternative n, ViewQueryResult (v g) ~ v (ViewQueryResult g), Monoid (n (v g))) => Set k -> ViewHalfMorphism n m (SubVessel k v g) (v g)
- Data.Vessel.SubVessel: getSubVessel :: Ord k => SubVessel k v f -> MonoidalMap k (v f)
- Data.Vessel.SubVessel: handleSubSubVesselSelector :: (Ord k1, Ord k2, Applicative m, Has View tag, GCompare tag) => (forall v. tag v -> MonoidalMap (k1, k2) (v f) -> m (MonoidalMap (k1, k2) (v g))) -> MonoidalMap k1 (SubVessel k2 (Vessel tag) f) -> m (MonoidalMap k1 (SubVessel k2 (Vessel tag) g))
- Data.Vessel.SubVessel: handleSubVesselSelector :: forall k m tag (f :: * -> *) (g :: * -> *). (Ord k, Applicative m, Has View tag, GCompare tag) => (forall v. tag v -> MonoidalMap k (v f) -> m (MonoidalMap k (v g))) -> SubVessel k (Vessel tag) f -> m (SubVessel k (Vessel tag) g)
- Data.Vessel.SubVessel: instance (Data.Patch.Group (v f), GHC.Classes.Ord k, Data.Vessel.Class.View v) => Data.Patch.Group (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Base.Semigroup (v f), GHC.Classes.Ord k, Data.Vessel.Class.View v) => Data.Patch.Additive (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Base.Semigroup (v f), GHC.Classes.Ord k, Data.Vessel.Class.View v) => GHC.Base.Monoid (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Base.Semigroup (v f), GHC.Classes.Ord k, Data.Vessel.Class.View v) => GHC.Base.Semigroup (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, Data.Aeson.Types.FromJSON.FromJSON k, Data.Aeson.Types.FromJSON.FromJSON (v f), Data.Vessel.Class.View v) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, Data.Aeson.Types.ToJSON.ToJSON k, Data.Aeson.Types.ToJSON.ToJSON (v f)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, Data.Vessel.Class.View v) => Data.Vessel.Class.EmptyView (Data.Vessel.SubVessel.SubVessel k v)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, Data.Vessel.Class.View v) => Data.Vessel.Class.View (Data.Vessel.SubVessel.SubVessel k v)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, Data.Vessel.Class.View v, Reflex.Query.Class.Query (Data.Vessel.Vessel.Vessel (Data.Vessel.SubVessel.SubVesselKey k v) g), GHC.Base.Semigroup (v (Data.Functor.Compose.Compose c (Data.Vessel.Vessel.VesselLeafWrapper (Reflex.Query.Class.QueryResult (Data.Vessel.Vessel.Vessel (Data.Vessel.SubVessel.SubVesselKey k v) g)))))) => Reflex.Query.Class.Query (Data.Vessel.SubVessel.SubVessel k v (Data.Functor.Compose.Compose c g))
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, GHC.Base.Semigroup (v Data.Functor.Identity.Identity), Data.Vessel.Class.View v) => Reflex.Query.Class.Query (Data.Vessel.SubVessel.SubVessel k v (Data.Functor.Const.Const x))
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, GHC.Base.Semigroup (v Data.Functor.Identity.Identity), Data.Vessel.Class.View v) => Reflex.Query.Class.Query (Data.Vessel.SubVessel.SubVessel k v Data.Proxy.Proxy)
- Data.Vessel.SubVessel: instance (GHC.Classes.Ord k, GHC.Classes.Eq (v f)) => GHC.Classes.Eq (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance (GHC.Show.Show k, GHC.Show.Show (v f)) => GHC.Show.Show (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance Data.Aeson.Types.FromJSON.FromJSON k => Data.Aeson.Types.FromJSON.FromJSON (Data.Some.Newtype.Some (Data.Vessel.SubVessel.SubVesselKey k v))
- Data.Vessel.SubVessel: instance Data.Aeson.Types.ToJSON.ToJSON k => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.SubVessel.SubVesselKey k f g)
- Data.Vessel.SubVessel: instance Data.Constraint.Extras.ArgDict c (Data.Vessel.SubVessel.SubVesselKey k f)
- Data.Vessel.SubVessel: instance GHC.Classes.Eq k => Data.GADT.Internal.GEq (Data.Vessel.SubVessel.SubVesselKey k v)
- Data.Vessel.SubVessel: instance GHC.Classes.Ord k => Data.GADT.Internal.GCompare (Data.Vessel.SubVessel.SubVesselKey k v)
- Data.Vessel.SubVessel: instance GHC.Generics.Generic (Data.Vessel.SubVessel.SubVessel k v f)
- Data.Vessel.SubVessel: instance GHC.Show.Show k => Data.GADT.Internal.GShow (Data.Vessel.SubVessel.SubVesselKey k f)
- Data.Vessel.SubVessel: instance GHC.Show.Show k => GHC.Show.Show (Data.Vessel.SubVessel.SubVesselKey k f g)
- Data.Vessel.SubVessel: lookupSubVessel :: Ord k => k -> SubVessel k v f -> Maybe (v f)
- Data.Vessel.SubVessel: mapMaybeWithKeySubVessel :: forall k v (g :: * -> *) (g' :: * -> *). (View v, Ord k) => (k -> v g -> Maybe (v g')) -> SubVessel k v g -> SubVessel k v g'
- Data.Vessel.SubVessel: mkSubVessel :: Ord k => MonoidalMap k (v f) -> SubVessel k v f
- Data.Vessel.SubVessel: newtype SubVessel (k :: *) (v :: (* -> *) -> *) (f :: * -> *)
- Data.Vessel.SubVessel: singletonSubVessel :: forall k f v. View v => k -> v f -> SubVessel k v f
- Data.Vessel.SubVessel: subVessel :: (Ord k, View v, ViewQueryResult (v g) ~ v (ViewQueryResult g), Alternative n, Applicative m) => k -> ViewMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: subVesselFromKeys :: (Ord k, View v) => (k -> v f) -> Set k -> SubVessel k v f
- Data.Vessel.SubVessel: subVesselWildcard :: (Ord k, View v, ViewQueryResult (v g) ~ v (ViewQueryResult g), Semigroup (v g), Semigroup (v (ViewQueryResult g)), Alternative n, Applicative m) => ViewMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: subVessels :: (Ord k, Applicative m, View v, Alternative n, ViewQueryResult (v g) ~ v (ViewQueryResult g), Monoid (n (v g)), Monoid (n (v (ViewQueryResult g)))) => Set k -> ViewMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: toSubVessel :: (Ord k, Applicative m, Alternative n, View v, ViewQueryResult (v g) ~ v (ViewQueryResult g)) => k -> ViewHalfMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: toSubVesselWildcard :: (Ord k, Applicative m, Alternative n, View v, ViewQueryResult (v g) ~ v (ViewQueryResult g), Semigroup (v (ViewQueryResult g))) => ViewHalfMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: toSubVessels :: (Ord k, Applicative m, View v, Alternative n, ViewQueryResult (v g) ~ v (ViewQueryResult g), Monoid (n (v (ViewQueryResult g)))) => Set k -> ViewHalfMorphism m n (v g) (SubVessel k v g)
- Data.Vessel.SubVessel: traverseSubVessel :: (Ord k, View v, Applicative m) => (k -> v g -> m (v h)) -> SubVessel k v g -> m (SubVessel k v h)
- Data.Vessel.SubVessel: uncurrySubVessel :: (Ord k1, Ord k2) => MonoidalMap k1 (SubVessel k2 v f) -> SubVessel (k1, k2) v f
- Data.Vessel.Vessel: Vessel :: MonoidalDMap k (FlipAp g) -> Vessel
- Data.Vessel.Vessel: [unVessel] :: Vessel -> MonoidalDMap k (FlipAp g)
- Data.Vessel.Vessel: buildV :: (GCompare k, Has View k, Applicative m) => Vessel k g -> (forall v. k v -> v g -> m (v h)) -> m (Vessel k h)
- Data.Vessel.Vessel: condenseV' :: forall k t g. (Has View k, GCompare k, Foldable t, Filterable t, Functor t) => DMap k (FlipAp g) -> t (Vessel k g) -> Vessel k (Compose t g)
- Data.Vessel.Vessel: filterNullFlipAps :: (GCompare k, Has View k) => MonoidalDMap k (FlipAp f) -> MonoidalDMap k (FlipAp f)
- Data.Vessel.Vessel: fromListV :: (GCompare k, Has View k) => [VSum k g] -> Vessel k g
- Data.Vessel.Vessel: fromVessel :: (Alternative m, Applicative n, GCompare k, ViewQueryResult (v g) ~ v (ViewQueryResult g), View v) => k v -> ViewHalfMorphism m n (Vessel k g) (v g)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has Data.Vessel.Class.View k, Data.GADT.Internal.GCompare k) => Data.Vessel.Class.EmptyView (Data.Vessel.Vessel.Vessel k)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has Data.Vessel.Class.View k, Data.GADT.Internal.GCompare k) => Data.Vessel.Class.View (Data.Vessel.Vessel.Vessel k)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has Data.Vessel.Class.View k, Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp (Data.Functor.Compose.Compose c (Data.Vessel.Vessel.VesselLeafWrapper (Reflex.Query.Class.QueryResult (Data.Vessel.Vessel.Vessel k g))))), Reflex.Query.Class.Query (Data.Vessel.Vessel.Vessel k g)) => Reflex.Query.Class.Query (Data.Vessel.Vessel.Vessel k (Data.Functor.Compose.Compose c g))
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has Data.Vessel.Class.View k, Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp Data.Functor.Identity.Identity)) => Reflex.Query.Class.Query (Data.Vessel.Vessel.Vessel k (Data.Functor.Const.Const x))
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has Data.Vessel.Class.View k, Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp Data.Functor.Identity.Identity)) => Reflex.Query.Class.Query (Data.Vessel.Vessel.Vessel k Data.Proxy.Proxy)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has' Data.Patch.Additive k (Data.Vessel.Internal.FlipAp g), Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp g), Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has Data.Vessel.Class.View k) => Data.Patch.Additive (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp g), Data.Constraint.Extras.Has' Data.Patch.Group k (Data.Vessel.Internal.FlipAp g), Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has Data.Vessel.Class.View k) => Data.Patch.Group (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp g), Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has Data.Vessel.Class.View k) => GHC.Base.Monoid (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.Constraint.Extras.Has' GHC.Base.Semigroup k (Data.Vessel.Internal.FlipAp g), Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has Data.Vessel.Class.View k) => GHC.Base.Semigroup (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.Constraint.Forall.ForallF GHC.Show.Show k, Data.GADT.Internal.GShow k, Data.Constraint.Extras.Has' GHC.Show.Show k (Data.Vessel.Internal.FlipAp g)) => GHC.Show.Show (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.GADT.Internal.GCompare k, Data.Aeson.Types.FromJSON.FromJSON (Data.Some.Newtype.Some k), Data.Constraint.Extras.HasV Data.Aeson.Types.FromJSON.FromJSON k g, Data.Constraint.Extras.Has Data.Vessel.Class.View k) => Data.Aeson.Types.FromJSON.FromJSON (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Extras.Has' GHC.Classes.Eq k (Data.Vessel.Internal.FlipAp g)) => GHC.Classes.Eq (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance (Data.GADT.Internal.GCompare k, Data.Constraint.Forall.ForallF Data.Aeson.Types.ToJSON.ToJSON k, Data.Constraint.Extras.HasV Data.Aeson.Types.ToJSON.ToJSON k g) => Data.Aeson.Types.ToJSON.ToJSON (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: instance GHC.Generics.Generic (Data.Vessel.Vessel.Vessel k g)
- Data.Vessel.Vessel: intersectionDMapMaybeWithKey :: GCompare k => (forall x. k x -> a x -> b x -> Maybe (c x)) -> MonoidalDMap k a -> MonoidalDMap k b -> MonoidalDMap k c
- Data.Vessel.Vessel: intersectionMaybeWithKeyV :: (GCompare k, Has View k) => (forall v. View v => k v -> v g -> v g' -> Maybe (v h)) -> Vessel k g -> Vessel k g' -> Vessel k h
- Data.Vessel.Vessel: intersectionWithKeyV :: (GCompare k, Has View k) => (forall v. View v => k v -> v g -> v g' -> v h) -> Vessel k g -> Vessel k g' -> Vessel k h
- Data.Vessel.Vessel: lookupV :: GCompare k => k v -> Vessel k g -> Maybe (v g)
- Data.Vessel.Vessel: mapMaybeWithKeyV :: (GCompare k, Has View k) => (forall v. View v => k v -> v g -> Maybe (v g')) -> Vessel k g -> Vessel k g'
- Data.Vessel.Vessel: newtype Vessel (k :: ((* -> *) -> *) -> *) (g :: * -> *)
- Data.Vessel.Vessel: singletonV :: View v => k v -> v g -> Vessel k g
- Data.Vessel.Vessel: splitLTV :: (GCompare k, View v) => k v -> Vessel k g -> (Vessel k g, Vessel k g)
- Data.Vessel.Vessel: splitOneV :: (GCompare k, View v) => k v -> Vessel k g -> Maybe (These (Vessel k g) (Vessel k g))
- Data.Vessel.Vessel: splitV :: forall k t g v. (GCompare k, View v, Filterable t) => k v -> t (Vessel k g) -> (t (Vessel k g), t (Vessel k g))
- Data.Vessel.Vessel: toListV :: Vessel k g -> [VSum k g]
- Data.Vessel.Vessel: toVessel :: (Applicative m, Alternative n, GCompare k, ViewQueryResult (v g) ~ v (ViewQueryResult g), View v) => k v -> ViewHalfMorphism m n (v g) (Vessel k g)
- Data.Vessel.Vessel: traverseWithKeyV :: (GCompare k, Has View k, Applicative m) => (forall v. View v => k v -> v g -> m (v h)) -> Vessel k g -> m (Vessel k h)
- Data.Vessel.Vessel: traverseWithKeyV_ :: (GCompare k, Has View k, Applicative m) => (forall v. View v => k v -> v g -> m ()) -> Vessel k g -> m ()
- Data.Vessel.Vessel: type family VesselLeafWrapper v
- Data.Vessel.Vessel: unionDistinctAscV :: GCompare k => Vessel k g -> Vessel k g -> Vessel k g
- Data.Vessel.Vessel: vessel :: (GCompare k, ViewQueryResult (v g) ~ v (ViewQueryResult g), View v, Alternative n, Applicative m) => k v -> ViewMorphism m n (v g) (Vessel k g)
- Data.Vessel.ViewMorphism: ViewHalfMorphism :: (p -> m q) -> (ViewQueryResult q -> n (ViewQueryResult p)) -> ViewHalfMorphism m n p q
- Data.Vessel.ViewMorphism: ViewMorphism :: ViewHalfMorphism m n p q -> ViewHalfMorphism n m q p -> ViewMorphism m n p q
- Data.Vessel.ViewMorphism: [_viewMorphism_from] :: ViewMorphism m n p q -> ViewHalfMorphism n m q p
- Data.Vessel.ViewMorphism: [_viewMorphism_mapQueryResult] :: ViewHalfMorphism m n p q -> ViewQueryResult q -> n (ViewQueryResult p)
- Data.Vessel.ViewMorphism: [_viewMorphism_mapQuery] :: ViewHalfMorphism m n p q -> p -> m q
- Data.Vessel.ViewMorphism: [_viewMorphism_to] :: ViewMorphism m n p q -> ViewHalfMorphism m n p q
- Data.Vessel.ViewMorphism: data ViewHalfMorphism m n p q
- Data.Vessel.ViewMorphism: data ViewMorphism m n p q
- Data.Vessel.ViewMorphism: fromZipViewMorphism :: forall m n a b c. (Applicative m, Semigroup (n (ViewQueryResult c))) => ViewHalfMorphism m n c a -> ViewHalfMorphism m n c b -> ViewHalfMorphism m n c (a, b)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Monad m, GHC.Base.Monad n) => Control.Category.Category (Data.Vessel.ViewMorphism.ViewHalfMorphism n m)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Monad m, GHC.Base.Monad n) => Control.Category.Category (Data.Vessel.ViewMorphism.ViewMorphism m n)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Monoid (m b), GHC.Base.Monoid (m (Data.Vessel.ViewMorphism.ViewQueryResult b)), GHC.Base.Monoid (n a), GHC.Base.Monoid (n (Data.Vessel.ViewMorphism.ViewQueryResult a))) => GHC.Base.Monoid (Data.Vessel.ViewMorphism.ViewMorphism m n a b)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Monoid (m b), GHC.Base.Monoid (n (Data.Vessel.ViewMorphism.ViewQueryResult a))) => GHC.Base.Monoid (Data.Vessel.ViewMorphism.ViewHalfMorphism m n a b)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Semigroup (m b), GHC.Base.Semigroup (m (Data.Vessel.ViewMorphism.ViewQueryResult b)), GHC.Base.Semigroup (n a), GHC.Base.Semigroup (n (Data.Vessel.ViewMorphism.ViewQueryResult a))) => GHC.Base.Semigroup (Data.Vessel.ViewMorphism.ViewMorphism m n a b)
- Data.Vessel.ViewMorphism: instance (GHC.Base.Semigroup (m b), GHC.Base.Semigroup (n (Data.Vessel.ViewMorphism.ViewQueryResult a))) => GHC.Base.Semigroup (Data.Vessel.ViewMorphism.ViewHalfMorphism m n a b)
- Data.Vessel.ViewMorphism: queryViewMorphism :: forall t (p :: *) (q :: *) m partial. (Reflex t, MonadQuery t q m, Monad m, QueryResult q ~ ViewQueryResult q) => p -> Dynamic t (ViewMorphism Identity partial p q) -> m (Dynamic t (partial (ViewQueryResult p)))
- Data.Vessel.ViewMorphism: toZipViewMorphism :: forall m n a b c. (Semialign n, Semigroup (m c)) => ViewHalfMorphism m n a c -> ViewHalfMorphism m n b c -> ViewHalfMorphism m n (a, b) c
- Data.Vessel.ViewMorphism: type ViewMorphismSimple = ViewMorphism Identity Maybe
- Data.Vessel.ViewMorphism: type family ViewQueryResult (v :: k) :: k
- Data.Vessel.ViewMorphism: zipViewMorphism :: (Semigroup (m c), Semigroup (m (ViewQueryResult c)), Semialign n, Applicative n) => ViewMorphism m n a c -> ViewMorphism m n b c -> ViewMorphism m n (a, b) c
+ Tutorial: GrpMap :: Map k v -> GrpMap k v
+ Tutorial: Qhkd :: MonoidalMap PostId (f (First (Maybe Post))) -> MonoidalMap () (f (Max (Maybe PostId))) -> Qhkd
+ Tutorial: Qsimple :: GrpMap PostId g -> GrpMap () g -> Qsimple g
+ Tutorial: Rsimple :: MonoidalMap PostId (First (Maybe Post)) -> MonoidalMap () (Max (Maybe PostId)) -> Rsimple
+ Tutorial: [LatestPostId] :: Qvessel (IdentityV (Max (Maybe PostId)))
+ Tutorial: [Posts] :: Qvessel (MapV PostId (First (Maybe Post)))
+ Tutorial: [Qtag_LatestPostId] :: Qtag (Max (Maybe PostId))
+ Tutorial: [Qtag_Posts] :: PostId -> Qtag (First (Maybe Post))
+ Tutorial: [_q_latestPostId] :: Qsimple g -> GrpMap () g
+ Tutorial: [_q_posts] :: Qsimple g -> GrpMap PostId g
+ Tutorial: [_qhkd_latestPostId] :: Qhkd -> MonoidalMap () (f (Max (Maybe PostId)))
+ Tutorial: [_qhkd_posts] :: Qhkd -> MonoidalMap PostId (f (First (Maybe Post)))
+ Tutorial: [_r_latestPostId] :: Rsimple -> MonoidalMap () (Max (Maybe PostId))
+ Tutorial: [_r_posts] :: Rsimple -> MonoidalMap PostId (First (Maybe Post))
+ Tutorial: [unGrpMap] :: GrpMap k v -> Map k v
+ Tutorial: class (forall g. (Eq g, Group g) => Group (f g)) => GrpFunctor f
+ Tutorial: data Qhkd (f :: * -> *)
+ Tutorial: data Qsimple g
+ Tutorial: data Qtag (a :: *)
+ Tutorial: data Qvessel (v :: (* -> *) -> *)
+ Tutorial: data Rsimple
+ Tutorial: dischargeMonadQuery :: forall v t m a. (Additive (v SelectedCount), Group (v SelectedCount), PerformEvent t m, GrpFunctor v, Eq (v SelectedCount), Monoid (QueryResult (v SelectedCount)), PostBuild t m, MonadHold t m, MonadFix m, Widget t m, Query (v SelectedCount)) => (v SelectedCount -> Performable m (QueryResult (v SelectedCount))) -> (forall m'. (PostBuild t m', MonadHold t m', Widget t m', MonadFix m', MonadQuery t (v SelectedCount) m') => m' a) -> m a
+ Tutorial: displayLatestPost :: (MonadHold t m, MonadFix m, MonadQuery t (Qsimple SelectedCount) m, QueryResult (Qsimple SelectedCount) ~ Rsimple, Reflex t, PostBuild t m, Widget t m) => m ()
+ Tutorial: displayPost :: (MonadQuery t (Qsimple SelectedCount) m, QueryResult (Qsimple SelectedCount) ~ Rsimple, PostBuild t m, MonadHold t m, MonadFix m, Widget t m) => Dynamic t PostId -> m ()
+ Tutorial: dynText :: Monad m => Dynamic t Text -> m ()
+ Tutorial: dyn_ :: (NotReady t m, Adjustable t m, PostBuild t m) => Dynamic t (m a) -> m ()
+ Tutorial: instance (Data.Patch.Group g, GHC.Classes.Eq g, GHC.Classes.Ord k) => Data.Patch.Group (Tutorial.GrpMap k g)
+ Tutorial: instance (GHC.Base.Monoid g, GHC.Classes.Eq g, GHC.Classes.Ord k) => GHC.Base.Monoid (Tutorial.GrpMap k g)
+ Tutorial: instance (GHC.Base.Monoid g, GHC.Classes.Eq g, GHC.Classes.Ord k) => GHC.Base.Semigroup (Tutorial.GrpMap k g)
+ Tutorial: instance (GHC.Classes.Eq g, Data.Patch.Group g) => Data.Patch.Group (Tutorial.Qsimple g)
+ Tutorial: instance (GHC.Classes.Eq g, GHC.Base.Monoid g) => GHC.Base.Monoid (Tutorial.Qsimple g)
+ Tutorial: instance (GHC.Classes.Eq g, GHC.Base.Monoid g) => GHC.Base.Semigroup (Tutorial.Qsimple g)
+ Tutorial: instance (GHC.Classes.Eq g, GHC.Base.Monoid g, Data.Patch.Additive g) => Data.Patch.Additive (Tutorial.Qsimple g)
+ Tutorial: instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Tutorial.GrpMap k v)
+ Tutorial: instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => GHC.Classes.Ord (Tutorial.GrpMap k v)
+ Tutorial: instance (GHC.Classes.Ord k, GHC.Read.Read k, GHC.Read.Read v) => GHC.Read.Read (Tutorial.GrpMap k v)
+ Tutorial: instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Tutorial.GrpMap k v)
+ Tutorial: instance Data.Aeson.Types.FromJSON.FromJSON (Data.Some.Newtype.Some Tutorial.Qvessel)
+ Tutorial: instance Data.Aeson.Types.ToJSON.ToJSON (Tutorial.Qvessel v)
+ Tutorial: instance Data.Constraint.Extras.ArgDict c Tutorial.Qvessel
+ Tutorial: instance Data.GADT.Internal.GCompare Tutorial.Qvessel
+ Tutorial: instance Data.GADT.Internal.GEq Tutorial.Qvessel
+ Tutorial: instance Data.GADT.Internal.GShow Tutorial.Qvessel
+ Tutorial: instance GHC.Base.Monoid Tutorial.Rsimple
+ Tutorial: instance GHC.Base.Semigroup Tutorial.Rsimple
+ Tutorial: instance GHC.Classes.Eq Tutorial.Rsimple
+ Tutorial: instance GHC.Classes.Eq g => GHC.Classes.Eq (Tutorial.Qsimple g)
+ Tutorial: instance GHC.Classes.Ord Tutorial.Rsimple
+ Tutorial: instance GHC.Classes.Ord g => GHC.Classes.Ord (Tutorial.Qsimple g)
+ Tutorial: instance GHC.Classes.Ord k => Tutorial.GrpFunctor (Tutorial.GrpMap k)
+ Tutorial: instance GHC.Read.Read Tutorial.Rsimple
+ Tutorial: instance GHC.Read.Read g => GHC.Read.Read (Tutorial.Qsimple g)
+ Tutorial: instance GHC.Show.Show Tutorial.Rsimple
+ Tutorial: instance GHC.Show.Show g => GHC.Show.Show (Tutorial.Qsimple g)
+ Tutorial: instance Reflex.Query.Class.Query (Tutorial.Qsimple g)
+ Tutorial: instance Tutorial.GrpFunctor ((->) r)
+ Tutorial: instance Tutorial.GrpFunctor Data.Functor.Identity.Identity
+ Tutorial: instance Tutorial.GrpFunctor Data.Proxy.Proxy
+ Tutorial: instance Tutorial.GrpFunctor Tutorial.Qsimple
+ Tutorial: liftNonZero :: (Monoid a, Eq a) => (a -> a -> a) -> a -> a -> Maybe a
+ Tutorial: mapG :: (GrpFunctor f, Eq b, Group b) => (a -> b) -> f a -> f b
+ Tutorial: newtype GrpMap k v
+ Tutorial: positive :: forall x. (Monoid x, Ord x) => x -> SelectedCount
+ Tutorial: readShowLatestPost :: (MonadIO (Performable m), PerformEvent t m, PostBuild t m, MonadHold t m, MonadFix m, Query (Qsimple SelectedCount), QueryResult (Qsimple SelectedCount) ~ Rsimple, Widget t m) => m ()
+ Tutorial: text :: Monad m => Text -> m ()
+ Tutorial: type Post = Text
+ Tutorial: type PostId = Int
+ Tutorial: type Qhkd_query g = Qhkd (Const g)
+ Tutorial: type Qhkd_response = Qhkd Identity
+ Tutorial: type Qtag_query g = DMap Qtag (Const g)
+ Tutorial: type Qtag_response = DMap Qtag Identity
+ Tutorial: type Widget t m = (NotReady t m, Adjustable t m, PostBuild t m)
+ Tutorial: viewLatestPostId :: (MonadQuery t (Vessel Qvessel (Const SelectedCount)) m, Reflex t, Monad m) => m (Dynamic t (Maybe (Maybe PostId)))
+ Tutorial: viewPost :: (MonadQuery t (Vessel Qvessel (Const SelectedCount)) m, Reflex t, Monad m) => Dynamic t PostId -> m (Dynamic t (Maybe (Maybe Post)))
+ Tutorial: watchLatestPostId :: (MonadQuery t (Qsimple SelectedCount) m, QueryResult (Qsimple SelectedCount) ~ Rsimple, Reflex t, Monad m) => m (Dynamic t (Maybe (Maybe PostId)))
+ Tutorial: watchPost :: (MonadQuery t (Qsimple SelectedCount) m, QueryResult (Qsimple SelectedCount) ~ Rsimple, Reflex t, Monad m) => Dynamic t PostId -> m (Dynamic t (Maybe (Maybe Post)))

Files

ChangeLog.md view
@@ -1,5 +1,11 @@ # Revision history for vessel +## 0.2.1.0++* Allow `Vessel` and `DMapV` types to be more liberally kinded in their indexes.+* Add Data.Vessel.Path. See that module for documentation.+* Add `singletonDMapV` and `lookupDMapV`+ ## 0.2.0.0  * Add an orphan instance for 'Additive' of 'Compose' this is in line with the other orphans for 'Compose' that will be phased out in a future release in favor of an upstream solution.
src/Data/Vessel.hs view
@@ -34,6 +34,10 @@   , traverseSubVessel   , singletonSubVessel   , lookupSubVessel+  , Path(..)+  , (~>)+  , Keyed(..)+  , SetKeyed(..)   ) where  import Data.Functor.Compose@@ -52,3 +56,4 @@ import Data.Vessel.Single as X import Data.Vessel.SubVessel as X import Data.Vessel.ViewMorphism as X+import Data.Vessel.Path as X
src/Data/Vessel/Class.hs view
@@ -17,6 +17,7 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UndecidableInstances #-}  module Data.Vessel.Class where @@ -59,7 +60,7 @@ -- -- It also specifies the cropV operation which restricts a view to a particular selection, as well -- as operations for mapping functions over all the leaves of the container.-class View (v :: (* -> *) -> *) where+class View (v :: (x -> *) -> *) where   -- | Transpose a sufficiently-Map-like structure into a container, effectively aggregating   -- many structures into a single one containing information about which keys each part of it   -- came from originally.
src/Data/Vessel/DependentMap.hs view
@@ -26,6 +26,7 @@ import Data.Constraint.Extras import Data.Constraint.Forall import Data.Dependent.Map.Monoidal (MonoidalDMap(..))+import qualified Data.Dependent.Map.Monoidal as MonoidalDMap import Data.Functor.Compose import Data.GADT.Compare import Data.Some (Some(Some))@@ -44,34 +45,34 @@ import Data.Vessel.Internal  -- | A functor-indexed container corrresponding to DMap k v.-newtype DMapV (k :: * -> *) (v :: * -> *) g = DMapV { unDMapV :: MonoidalDMap k (Compose g v) }+newtype DMapV (k :: x -> *) (v :: x -> *) g = DMapV { unDMapV :: MonoidalDMap k (g :.: v) }   deriving (Generic) -deriving instance (GCompare k, Has' Eq k (Compose g v)) => Eq (DMapV k v g)-deriving instance (GCompare k, Has' Eq k (Compose g v), Has' Ord k (Compose g v)) => Ord (DMapV k v g)-deriving instance (GCompare k, Has' Semigroup k (Compose g v)) => Semigroup (DMapV k v g)-deriving instance (GCompare k, Has' Semigroup k (Compose g v), Has' Monoid k (Compose g v)) => Monoid (DMapV k v g)-deriving instance (GCompare k, Has' Semigroup k (Compose g v), Has' Monoid k (Compose g v), Has' Group k (Compose g v)) => Group (DMapV k v g)-deriving instance (GCompare k, Has' Semigroup k (Compose g v), Has' Monoid k (Compose g v), Has' Group k (Compose g v), Has' Additive k (Compose g v)) => Additive (DMapV k v g)+deriving instance (GCompare k, Has' Eq k (g :.: v)) => Eq (DMapV k v g)+deriving instance (GCompare k, Has' Eq k (g :.: v), Has' Ord k (g :.: v)) => Ord (DMapV k v g)+deriving instance (GCompare k, Has' Semigroup k (g :.: v)) => Semigroup (DMapV k v g)+deriving instance (GCompare k, Has' Semigroup k (g :.: v), Has' Monoid k (g :.: v)) => Monoid (DMapV k v g)+deriving instance (GCompare k, Has' Semigroup k (g :.: v), Has' Monoid k (g :.: v), Has' Group k (g :.: v)) => Group (DMapV k v g)+deriving instance (GCompare k, Has' Semigroup k (g :.: v), Has' Monoid k (g :.: v), Has' Group k (g :.: v), Has' Additive k (g :.: v)) => Additive (DMapV k v g) -instance (Has' ToJSON k (Compose g v), ForallF ToJSON k) => ToJSON (DMapV k v g)+instance (Has' ToJSON k (g :.: v), ForallF ToJSON k) => ToJSON (DMapV k v g) -instance (Has' FromJSON k (Compose g v), FromJSON (Some k), GCompare k) => FromJSON (DMapV k v g)+instance (Has' FromJSON k (g :.: v), FromJSON (Some k), GCompare k) => FromJSON (DMapV k v g) -deriving instance (ForallF Show k, Has' Show k (Compose g v)) => Show (DMapV k v g)+deriving instance (ForallF Show k, Has' Show k (g :.: v)) => Show (DMapV k v g)  instance (GCompare k) => View (DMapV k v) where-  cropV f (DMapV s) (DMapV i) = collapseNullV $ DMapV (DMap.intersectionWithKey (\_ (Compose x) (Compose y) -> Compose $ f x y) s i)+  cropV f (DMapV s) (DMapV i) = collapseNullV $ DMapV (DMap.intersectionWithKey (\_ (Comp1 x) (Comp1 y) -> Comp1 $ f x y) s i)   nullV (DMapV m) = DMap.null m-  condenseV m = DMapV . DMap.map assocLCompose . condenseV . fmap unDMapV $ m-  disperseV (DMapV m) = fmap DMapV . disperseV . DMap.map assocRCompose $ m-  mapV f (DMapV m) = DMapV $ DMap.map (\(Compose x) -> Compose (f x)) m-  traverseV f (DMapV m) = DMapV <$> DMap.traverseWithKey (\_ (Compose x) -> Compose <$> f x) m+  condenseV m = DMapV . DMap.map assocLComposeComp . condenseV . fmap unDMapV $ m+  disperseV (DMapV m) = fmap DMapV . disperseV . DMap.map assocRComposeComp $ m+  mapV f (DMapV m) = DMapV $ DMap.map (\(Comp1 x) -> Comp1 (f x)) m+  traverseV f (DMapV m) = DMapV <$> DMap.traverseWithKey (\_ (Comp1 x) -> Comp1 <$> f x) m   mapMaybeV f (DMapV (MonoidalDMap m)) = collapseNullV $ DMapV $ MonoidalDMap $-    DMap'.mapMaybe (fmap Compose . f . getCompose) m-  alignWithV f (DMapV a) (DMapV b) = DMapV (alignWithKeyMonoidalDMap (\_ x -> Compose . f $ bimap getCompose getCompose x) a b)+    DMap'.mapMaybe (fmap Comp1 . f . unComp1) m+  alignWithV f (DMapV a) (DMapV b) = DMapV (alignWithKeyMonoidalDMap (\_ x -> Comp1 . f $ bimap unComp1 unComp1 x) a b)   alignWithMaybeV f (DMapV a) (DMapV b) = collapseNullV . DMapV $-     alignWithKeyMaybeMonoidalDMap (\_ x -> fmap Compose $ f (bimap getCompose getCompose x)) a b+     alignWithKeyMaybeMonoidalDMap (\_ x -> fmap Comp1 $ f (bimap unComp1 unComp1 x)) a b  instance (GCompare k) => EmptyView (DMapV k v) where   emptyV = DMapV DMap.empty@@ -79,6 +80,11 @@ instance (GCompare k) => Selectable (DMapV k v) (Set (Some k)) where   type Selection (DMapV k v) (Set (Some k)) = MonoidalDMap k v   selector p s = DMapV . DMap.fromListWithKey (\_ x _ -> x) $-    fmap (\(Some k) -> k :=> Compose p) (Set.toList s)-  selection _ (DMapV m) = DMap.map (\(Compose (Identity v)) -> v) m+    fmap (\(Some k) -> k :=> Comp1 p) (Set.toList s)+  selection _ (DMapV m) = DMap.map (\(Comp1 (Identity v)) -> v) m +singletonDMapV :: k a -> g (v a) -> DMapV k v g+singletonDMapV k v = DMapV $ MonoidalDMap.singleton k (Comp1 v)++lookupDMapV :: GCompare k => k a -> DMapV k v g -> Maybe (g (v a))+lookupDMapV k (DMapV m) = unComp1 <$> MonoidalDMap.lookup k m
src/Data/Vessel/Internal.hs view
@@ -43,6 +43,7 @@ import Data.Witherable import qualified Data.Map as Map' import qualified Data.Map.Merge.Strict as Map'+import GHC.Generics  import qualified Data.Dependent.Map.Monoidal as DMap -- import qualified Data.Dependent.Map as DMap'@@ -66,7 +67,7 @@   -- A single Vessel key/value pair, essentially a choice of container type, together with a corresponding container.-data VSum (k :: ((* -> *) -> *) -> *) (g :: * -> *) = forall v. k v :~> v g+data VSum (k :: ((x -> *) -> *) -> *) (g :: x -> *) = forall v. k v :~> v g  ------- Serialisation ------- @@ -89,13 +90,6 @@  instance (Has' Group f g, Has' Semigroup f g, GCompare f) => Additive (MonoidalDMap f g) -instance (Semigroup (f (g a))) => Semigroup (Compose f g a) where-  (Compose x) <> (Compose y) = Compose (x <> y)--instance (Monoid (f (g a))) => Monoid (Compose f g a) where-  mempty = Compose mempty-  mappend (Compose x) (Compose y) = Compose (mappend x y)- instance (Additive (f (g a))) => Additive (Compose f g a)  ------- Miscellaneous stuff to be moved elsewhere -------@@ -107,6 +101,12 @@  assocRCompose :: (Functor f) => Compose (Compose f g) h x -> Compose f (Compose g h) x assocRCompose (Compose (Compose x)) = Compose (fmap Compose x)++assocLComposeComp :: (Functor f) => (Compose f (g :.: h)) x -> ((Compose f g) :.: h) x+assocLComposeComp (Compose x) = Comp1 $ Compose (fmap unComp1 x)++assocRComposeComp :: (Functor f) => ((Compose f g) :.: h) x -> Compose f (g :.: h) x+assocRComposeComp (Comp1 (Compose x)) = Compose (fmap Comp1 x)  alignWithKeyMaybeDMap :: GCompare k => (forall a. k a -> These (f a) (g a) -> Maybe (h a)) -> DMap k f -> DMap k g -> DMap k h alignWithKeyMaybeDMap f a b = DMap'.mapMaybeWithKey (\k t -> f k $ dtheseToThese t) $ DMap'.unionWithKey (\_ (DThis x) (DThat y) -> DThese x y) (DMap'.map DThis a) (DMap'.map DThat b)
+ src/Data/Vessel/Path.hs view
@@ -0,0 +1,164 @@+{-# Language FlexibleInstances #-}+{-# Language FunctionalDependencies #-}+{-# Language RankNTypes #-}+{-# Language GADTs #-}+module Data.Vessel.Path where++import Control.Applicative+import Control.Monad+import Control.Monad.Fix+import qualified Data.Dependent.Map.Monoidal as MonoidalDMap+import Data.GADT.Compare+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Map.Monoidal+import Data.Semigroup (First(..))+import Data.Set (Set)+import Data.Vessel.Class hiding (mapV)+import Data.Vessel.DependentMap hiding (dmapV)+import Data.Vessel.Identity hiding (identityV)+import Data.Vessel.Map hiding (mapV)+import Data.Vessel.Single hiding (singleV)+import Data.Vessel.SubVessel hiding (subVessel)+import Data.Vessel.Vessel hiding (vessel)+import Reflex++-- | A (Path v w w' v') consists of maps in opposite directions:+--+--  >        v ---> w+--  > Maybe v' <--- w'+--+--  If we think of v / v' as variants of a "small" structure, and w / w' as+--  variants of a "large" structure, this encodes how to on the one hand+--  include v inside a larger structure of type w, and how to (potentially)+--  extract a value of type v' from a structure of type w'.+--+--  Vessels are often used to represent queries and their responses. It may be+--  useful to think of @v@ as being some small part of a query, @w@ as being a+--  larger or more complete query, @w'@ as being a complete response, and @v'@+--  as being the smaller part of the response corresponding to @v@.+--+-- In this way, we can package up parts of the query/response round-trip,+-- and not have to specify twice at which keys we're querying on the one hand+-- and looking up on the other.+--+-- Each @Path@ will often be a pair of the "singleton" constructor of some sort of+-- map-like datastructure and its corresponding lookup.+--+--  For example, given @MapV k v@, @key k@ will produce a @Path@ that describes+--  how to construct a singleton @MapV@ and how to extract the value at key @k@+--  from a @MapV@.+--+--  This becomes particularly useful as your vessels become more complicated.+--  For example given a @SubVessel k (MapV k' a) g@, you can construct a path+--  such as @key k ~> key k'@ that constructs a singleton of a singleton and,+--  in the other direction, looks up the @MapV@ at key @k@ of the @SubVessel@+--  and the value at key @k'@ of the @MapV@.+--+--  Formally, these are arrows in the product category of Hask and the Kleisli+--  category of Maybe.+data Path v w w' v' = Path { _path_to :: v -> w, _path_from :: w' -> Maybe v' }++-- | Compose two paths+(~>) :: Path b c c' b' -> Path a b b' a' -> Path a c c' a'+Path to from ~> Path to' from' = Path (to . to') (from' <=< from)++-- | The identity path+idP :: Path a a b b+idP = Path id pure++-- | Construct a @Path@ which uses the given function on the "input" or "query" side+-- and does nothing on the output side.+preMap :: (a -> b) -> Path a b x x+preMap f = Path f pure++-- | Construct a @Path@ which uses the given function on the "output" or "response" side+-- and does nothing on the input side. Useful for post-processing the results of queries.+postMap :: (a' -> Maybe b') -> Path x x a' b'+postMap f = Path id f++-- | A class for keyed map-like datastructures of various types, giving an appropriate+-- @Path@ for constructing a singleton at the given key, and for extracting the value at+-- that key, if any.+class Keyed k a b b' a'  | k b -> a, k b' -> a' where+  key :: k -> Path a b b' a'++-- | A class for keyed map-like datastructures of various types, giving an appropriate+-- @Path@ for constructing a mapping having the given set of keys, with the same value+-- at every key, and for extracting the restriction of the corresponding map to the given keys.+class SetKeyed k a b b' a'  | k b -> a, k b' -> a' where+  keys :: Set k -> Path a b b' a'++instance (GCompare k, View v) => Keyed (k v) (v g) (Vessel k g) (Vessel k g') (v g') where+  key = vessel++instance (Ord k, View v) => Keyed k (v g) (SubVessel k v g) (SubVessel k v g') (v g') where+  key = subVessel++instance (Ord k) => Keyed k (g v) (MapV k v g) (MapV k v g') (g' v) where+  key = mapV++instance (GCompare k) => Keyed (k a) (g (v a)) (DMapV k v g) (DMapV k v g') (g' (v a)) where+  key = dmapV++instance (Ord k, Applicative g') => SetKeyed k (g v) (MapV k v g) (MapV k v g') (g' (Map k v)) where+  keys = mapVSet++-- | This is the implementation of @key@ for @Vessel@. Given some key of type @k v@, gives a @Path@+-- that on the one hand will transform a value of type @v g@ into a complete singleton @Vessel@+-- and in the other direction, will perform a lookup for the given key on a similar @Vessel@.+vessel :: (GCompare k, View v) => k v -> Path (v g) (Vessel k g) (Vessel k g') (v g')+vessel k = Path { _path_to = singletonV k, _path_from = lookupV k }++-- | This is the implementation of @key@ for @SubVessel@. Given some key of type @k@, gives a @Path@+-- that on the one hand will transform a value of type @v g@ into a complete singleton @SubVessel@+-- and in the other direction, will perform a lookup for the given key on a similar @SubVessel@.+subVessel :: (Ord k, View v) => k -> Path (v g) (SubVessel k v g) (SubVessel k v g') (v g')+subVessel k = Path { _path_to = singletonSubVessel k, _path_from = lookupSubVessel k }++-- | This is the implementation of @key@ for @MapV@. Given some key of type @k@, gives a @Path@+-- that on the one hand will transform a value of type @g v@ into a complete singleton @MapV@+-- and in the other direction, will perform a lookup for the given key on a similar @MapV@.+mapV :: (Ord k) => k -> Path (g v) (MapV k v g) (MapV k v g') (g' v)+mapV k = Path { _path_to = singletonMapV k, _path_from = lookupMapV k }++-- | This is the implementation of @keys@ for @MapV@. Given a set of keys of type @k@, gives a @Path@+-- that on the one hand will transform a value of type @g v@ into a @MapV@ having the given set of keys+-- and the given @g v@ at every key. In the other direction, it will perform a restrictKeys to select+-- the given keys out of the response of type @MapV k v g'@ and fully unpack the result into a+-- @g' (Map k v)@.+mapVSet :: (Ord k, Applicative g') => Set k -> Path (g v) (MapV k v g) (MapV k v g') (g' (Map k v))+mapVSet ks = Path+  { _path_to = \g -> MapV (MonoidalMap (Map.fromSet (const g) ks))+  , _path_from = Just . sequenceA . flip Map.restrictKeys ks . getMonoidalMap . unMapV+  }++-- | This is the implementation of @key@ for @DMapV@. Given some key of type @k a@, gives a @Path@+-- that on the one hand will transform a value of type @g (v a)@ into a complete singleton @DMapV@+-- and in the other direction, will perform a lookup for the given key on a similar @DMapV@.+dmapV :: (GCompare k) => k a -> Path (g (v a)) (DMapV k v g) (DMapV k v g') (g' (v a))+dmapV k = Path+  { _path_to = singletonDMapV k+  , _path_from = lookupDMapV k+  }++-- | This is a @Path@ which wraps/unwraps @IdentityV@. The unwrapping always succeeds of course.+identityV :: Path (g a) (IdentityV a g) (IdentityV a g') (g' a)+identityV = Path+  { _path_to = IdentityV+  , _path_from = Just . unIdentityV+  }++-- | This is a @Path@ which wraps/unwraps @SingleV@. Always produces a @SingleV@ containing @Just@ of+-- the input value on the input side, but unwrapping will result in @Just@ or @Nothing@ according to+-- whether the response contains a @Just@ or @Nothing@.+singleV :: (Traversable g', Functor g) => Path (g a) (SingleV a g) (SingleV a g') (g' a)+singleV = Path+  { _path_to = SingleV . fmap (First . Just)+  , _path_from = sequenceA . fmap getFirst . unSingleV+  }++-- | Combines two @Path@s whose full query type is a @Semigroup@, effectively, asking for two things at once,+-- and extracting the pair of results afterward.+zip :: (Semigroup c) => Path a c c' a' -> Path b c c' b' -> Path (a, b) c c' (a', b')+zip (Path to from) (Path to' from') = Path (\(x,y) -> to x <> to' y) (\c -> liftA2 (,) (from c) (from' c))
src/Data/Vessel/Vessel.hs view
@@ -58,13 +58,17 @@ -- discussed above, keyed by a GADT whose index will specify which sort of container goes in each position. -- -- Ordinary types with values have kind *--- Functors have kind * -> *--- Containers taking a functor as a parameter then have kind (* -> *) -> *--- The keys of a vessel are indexed by a functor-parametric container type, so they have kind ((* -> *) -> *) -> *+-- Functors have kind k -> *+-- Containers taking a functor as a parameter then have kind (k -> *) -> *+-- The keys of a vessel are indexed by a functor-parametric container type, so they have kind ((k -> *) -> *) -> * -- Vessel itself, for any such key type, produces a functor-parametric container, so it has kind+-- (((k -> *) -> *) -> *) -> (k -> *) -> *+--+-- The majority of use cases will be working entirely within * so that Vessel will be instantiated to the kind -- (((* -> *) -> *) -> *) -> (* -> *) -> *+-- -- Law: None of the items in the Vessel's MonoidalDMap are nullV-newtype Vessel (k :: ((* -> *) -> *) -> *) (g :: * -> *) = Vessel { unVessel :: MonoidalDMap k (FlipAp g) }+newtype Vessel (k :: ((x -> *) -> *) -> *) (g :: x -> *) = Vessel { unVessel :: MonoidalDMap k (FlipAp g) }   deriving (Generic)  deriving instance (GCompare k, Has' Eq k (FlipAp g)) => Eq (Vessel k g)
vessel.cabal view
@@ -1,5 +1,5 @@ name:               vessel-version:            0.2.0.0+version:            0.2.1.0 description:   A dependently-typed key-value data structure that allows for storage of both "queries", (wherein keys are stored along with reasons for selecting the items or counts of the number of times something has been selected), as well as the responses to those queries, in which the type of the key additionally determines the type of the response @@ -29,6 +29,7 @@     Data.Vessel.Identity     Data.Vessel.Internal     Data.Vessel.Map+    Data.Vessel.Path     Data.Vessel.Selectable     Data.Vessel.Single     Data.Vessel.SubVessel@@ -47,6 +48,7 @@   build-depends:       aeson                        >=1.4     && <1.6     , base                         >=4.9     && <4.15+    , base-orphans                 ^>=0.8.5     , bifunctors                   ^>=5.5     , constraints                  >=0.10    && <0.15     , constraints-extras           ^>=0.3@@ -54,14 +56,14 @@     , dependent-map                ^>=0.4     , dependent-monoidal-map       ^>=0.1.1.0     , dependent-sum                ^>=0.7-    , dependent-sum-aeson-orphans  ^>=0.3+    , dependent-sum-aeson-orphans  ^>=0.3.1     , monoidal-containers          ^>=0.6     , mtl                          ^>=2.2     , patch                        ^>=0.0.4.0     , reflex                       >=0.6.4   && <0.9     , semialign                    >=1-    , these                        ^>=1-    , witherable                   >=0.2     && <=0.3.2+    , these                        >=1 && <1.2+    , witherable                   >=0.2 && <0.5    hs-source-dirs:   src   default-language: Haskell2010