Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data SubVesselKey k (f :: (* -> *) -> *) (g :: (* -> *) -> *) where
- SubVesselKey :: k -> SubVesselKey k f f
- newtype SubVessel (k :: *) (v :: (* -> *) -> *) (f :: * -> *) = SubVessel {
- unSubVessel :: Vessel (SubVesselKey k v) f
- getSubVessel :: Ord k => SubVessel k v f -> MonoidalMap k (v f)
- mkSubVessel :: Ord k => MonoidalMap k (v f) -> SubVessel k v f
- traverseSubVessel :: (Ord k, View v, Applicative m) => (k -> v g -> m (v h)) -> SubVessel k v g -> m (SubVessel k v h)
- singletonSubVessel :: forall k f v. View v => k -> v f -> SubVessel k v f
- lookupSubVessel :: Ord k => k -> SubVessel k v f -> Maybe (v f)
- subVesselFromKeys :: (Ord k, View v) => (k -> v f) -> Set k -> SubVessel k v f
- 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)
- 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)
- 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)
- 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)
- 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)
- fromSubVesselWildcard :: (Ord k, Alternative m, Applicative n, Semigroup (v g)) => ViewHalfMorphism m n (SubVessel k v g) (v g)
- 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)
- 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)
- 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)
- mapMaybeWithKeySubVessel :: forall k v (g :: * -> *) (g' :: * -> *). (View v, Ord k) => (k -> v g -> Maybe (v g')) -> SubVessel k v g -> SubVessel k v g'
- uncurrySubVessel :: (Ord k1, Ord k2) => MonoidalMap k1 (SubVessel k2 v f) -> SubVessel (k1, k2) v f
- currySubVessel :: (Ord k1, Ord k2) => SubVessel (k1, k2) v f -> MonoidalMap k1 (SubVessel k2 v f)
- condenseVMMap :: forall k v g. View v => MonoidalMap k (v g) -> v (Compose (MonoidalMap k) g)
- 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)
- 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))
Documentation
data SubVesselKey k (f :: (* -> *) -> *) (g :: (* -> *) -> *) where Source #
SubVesselKey :: k -> SubVesselKey k f f |
Instances
newtype SubVessel (k :: *) (v :: (* -> *) -> *) (f :: * -> *) Source #
Something between MapV and Vessel, where the keys are simple values, but the values are full views.
TODO: this representation has the advantage that all of it's instances come "free", but the mostly "right" representation is probably ... Vessel v (Compose (MonoidalMap k) f)
SubVessel | |
|
Instances
getSubVessel :: Ord k => SubVessel k v f -> MonoidalMap k (v f) Source #
mkSubVessel :: Ord k => MonoidalMap k (v f) -> SubVessel k v f Source #
traverseSubVessel :: (Ord k, View v, Applicative m) => (k -> v g -> m (v h)) -> SubVessel k v g -> m (SubVessel k v h) Source #
singletonSubVessel :: forall k f v. View v => k -> v f -> SubVessel k v f Source #
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) Source #
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) Source #
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) Source #
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) Source #
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) Source #
fromSubVesselWildcard :: (Ord k, Alternative m, Applicative n, Semigroup (v g)) => ViewHalfMorphism m n (SubVessel k v g) (v g) Source #
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) Source #
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) Source #
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) Source #
mapMaybeWithKeySubVessel :: forall k v (g :: * -> *) (g' :: * -> *). (View v, Ord k) => (k -> v g -> Maybe (v g')) -> SubVessel k v g -> SubVessel k v g' Source #
uncurrySubVessel :: (Ord k1, Ord k2) => MonoidalMap k1 (SubVessel k2 v f) -> SubVessel (k1, k2) v f Source #
currySubVessel :: (Ord k1, Ord k2) => SubVessel (k1, k2) v f -> MonoidalMap k1 (SubVessel k2 v f) Source #
condenseVMMap :: forall k v g. View v => MonoidalMap k (v g) -> v (Compose (MonoidalMap k) g) Source #
the instance for Filterable (MonoidalMap k) is not defined anyplace conveninent, this sidesteps it for this particular case.
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) Source #
A gadget to "traverse" over all of the keys in a SubVessel in one step
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)) Source #
A gadget to "traverse" over all of the keys in a SubVessel, aligned to the keys nested inside a deeper Map, in one step