Copyright | (c) 2016 Allele Dev; 2017 Ixperta Solutions s.r.o.; 2017 Alexis King; 2024 Sayo Koyoneda |
---|---|
License | MPL-2.0 (see the LICENSE file) AND BSD-3-Clause (see the LICENSE.BSD3 file) |
Maintainer | ymdfield@outlook.jp |
Safe Haskell | None |
Language | GHC2021 |
Data.Effect.OpenUnion.Internal.HO
Description
Implementation of an open union for higher-order effects.
Importing this module allows unsafe access to the data structure of the open union, so it should not usually be imported directly.
Based on the open union in freer-simple.
Synopsis
- data UnionH (es :: [EffectH]) (f :: Type -> Type) a where
- hfmapUnion :: forall (f :: Type -> Type) (g :: Type -> Type) (es :: [EffectH]) a. (f ~> g) -> UnionH es f a -> UnionH es g a
- unsafeInjH :: forall e (f :: Type -> Type) a (es :: [EffectH]). Word -> e f a -> UnionH es f a
- unsafePrjH :: forall e (es :: [EffectH]) (f :: Type -> Type) a. HFunctor e => Word -> UnionH es f a -> Maybe (e f a)
- class FindElem e es => MemberH (e :: EffectH) (es :: [EffectH]) where
- type (<<|) = MemberH
- type MemberHBy (key :: k) (e :: EffectH) (es :: [EffectH]) = ((key ##> e) <<| es, LookupH key es ~ (key ##> e), IfKeyNotFound key es es)
- type family LookupH (key :: k) (r :: [(Type -> Type) -> Type -> Type]) :: EffectH where ...
- decompH :: forall e (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. HFunctor e => UnionH (e ': es) f a -> Either (UnionH es f a) (e f a)
- decomp0H :: forall e (f :: Type -> Type) a. HFunctor e => UnionH '[e] f a -> Either (UnionH ('[] :: [EffectH]) f a) (e f a)
- (!!+) :: forall e (f :: Type -> Type) a r (es :: [EffectH]). HFunctor e => (e f a -> r) -> (UnionH es f a -> r) -> UnionH (e ': es) f a -> r
- extractH :: forall e (f :: Type -> Type) a. HFunctor e => UnionH '[e] f a -> e f a
- inj0H :: forall e (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. e f a -> UnionH (e ': es) f a
- injNH :: forall (i :: Nat) (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. KnownNat i => ElemAt i es f a -> UnionH es f a
- prjNH :: forall (i :: Nat) (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. (KnownNat i, HFunctor (ElemAt i es)) => UnionH es f a -> Maybe (ElemAt i es f a)
- weakenH :: forall (any :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH (any ': es) f a
- weakensH :: forall (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. IsSuffixOf es es' => UnionH es f a -> UnionH es' f a
- weakenNH :: forall (len :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenN len es es' => UnionH es f a -> UnionH es' f a
- weakenUnderH :: forall (any :: EffectH) (e :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. UnionH (e ': es) f a -> UnionH (e ': (any ': es)) f a
- weakensUnderH :: forall (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenUnder offset es es' => UnionH es f a -> UnionH es' f a
- weakenNUnderH :: forall (len :: Natural) (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenNUnder len offset es es' => UnionH es f a -> UnionH es' f a
- strengthenH :: forall (e :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. e <<| es => UnionH (e ': es) f a -> UnionH es f a
- strengthensH :: forall (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. Strengthen es es' => UnionH es f a -> UnionH es' f a
- strengthenNH :: forall (len :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenN len es es' => UnionH es f a -> UnionH es' f a
- strengthenUnderH :: forall (e2 :: EffectH) (e1 :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. e2 <<| es => UnionH (e1 ': (e2 ': es)) f a -> UnionH (e1 ': es) f a
- strengthensUnderH :: forall (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenUnder offset es es' => UnionH es f a -> UnionH es' f a
- strengthenNUnderH :: forall (len :: Natural) (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenNUnder len offset es es' => UnionH es f a -> UnionH es' f a
- bundleUnionH :: forall (bundle :: [EffectH]) (es :: [EffectH]) (rest :: [EffectH]) (f :: Type -> Type) a. Split es bundle rest => UnionH es f a -> UnionH (UnionH bundle ': rest) f a
- bundleUnionNH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH es f a -> UnionH (UnionH (Take len es) ': Drop len es) f a
- unbundleUnionH :: forall (bundle :: [EffectH]) (es :: [EffectH]) (rest :: [EffectH]) (f :: Type -> Type) a. Split es bundle rest => UnionH (UnionH bundle ': rest) f a -> UnionH es f a
- unbundleUnionNH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH (UnionH (Take len es) ': Drop len es) f a -> UnionH es f a
- bundleUnionUnderH :: forall (offset :: Natural) (bundle :: [EffectH]) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. BundleUnder UnionH offset es es' bundle => UnionH es f a -> UnionH es' f a
- bundleUnionNUnderH :: forall (len :: Nat) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownNat len, KnownNat offset) => UnionH es f a -> UnionH (Take offset es ++ (UnionH (Take len (Drop offset es)) ': Drop len (Drop offset es))) f a
- unbundleUnionUnderH :: forall (offset :: Natural) (bundle :: [EffectH]) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. BundleUnder UnionH offset es es' bundle => UnionH es' f a -> UnionH es f a
- unbundleUnionNUnderH :: forall (len :: Nat) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownNat len, KnownNat offset) => UnionH (Take offset es ++ (UnionH (Take len (Drop offset es)) ': Drop len (Drop offset es))) f a -> UnionH es f a
- bundleAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH '[UnionH es] f a
- unbundleAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. UnionH '[UnionH es] f a -> UnionH es f a
- prefixUnionH :: forall (any :: [EffectH]) (es :: [EffectH]) (f :: Type -> Type) a. KnownLength any => UnionH es f a -> UnionH (any ++ es) f a
- prefixUnionUnderH :: forall (any :: [EffectH]) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownLength any, KnownNat offset) => UnionH es f a -> UnionH (Take offset es ++ (any ++ Drop offset es)) f a
- suffixUnionH :: forall (any :: [EffectH]) (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH (es ++ any) f a
- suffixUnionOverNH :: forall (any :: [EffectH]) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownLength any, KnownNat offset, KnownLength es) => UnionH es f a -> UnionH (Take (Length es - offset) es ++ (any ++ Drop (Length es - offset) es)) f a
- flipAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. KnownLength es => UnionH es f a -> UnionH (Reverse es) f a
- flipUnionH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH es f a -> UnionH (Reverse (Take len es) ++ Drop len es) f a
- flipUnionUnderH :: forall (len :: Nat) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownNat len, KnownNat offset) => UnionH es f a -> UnionH (Take offset es ++ (Reverse (Take len (Drop offset es)) ++ Drop len (Drop offset es))) f a
- nilH :: forall (f :: Type -> Type) a r. UnionH ('[] :: [EffectH]) f a -> r
Documentation
data UnionH (es :: [EffectH]) (f :: Type -> Type) a where Source #
Open union for higher-order effects.
Constructors
UnionH | |
Fields |
hfmapUnion :: forall (f :: Type -> Type) (g :: Type -> Type) (es :: [EffectH]) a. (f ~> g) -> UnionH es f a -> UnionH es g a Source #
unsafeInjH :: forall e (f :: Type -> Type) a (es :: [EffectH]). Word -> e f a -> UnionH es f a Source #
unsafePrjH :: forall e (es :: [EffectH]) (f :: Type -> Type) a. HFunctor e => Word -> UnionH es f a -> Maybe (e f a) Source #
class FindElem e es => MemberH (e :: EffectH) (es :: [EffectH]) where Source #
type MemberHBy (key :: k) (e :: EffectH) (es :: [EffectH]) = ((key ##> e) <<| es, LookupH key es ~ (key ##> e), IfKeyNotFound key es es) Source #
type family LookupH (key :: k) (r :: [(Type -> Type) -> Type -> Type]) :: EffectH where ... Source #
decompH :: forall e (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. HFunctor e => UnionH (e ': es) f a -> Either (UnionH es f a) (e f a) Source #
decomp0H :: forall e (f :: Type -> Type) a. HFunctor e => UnionH '[e] f a -> Either (UnionH ('[] :: [EffectH]) f a) (e f a) Source #
(!!+) :: forall e (f :: Type -> Type) a r (es :: [EffectH]). HFunctor e => (e f a -> r) -> (UnionH es f a -> r) -> UnionH (e ': es) f a -> r infixr 5 Source #
inj0H :: forall e (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. e f a -> UnionH (e ': es) f a Source #
injNH :: forall (i :: Nat) (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. KnownNat i => ElemAt i es f a -> UnionH es f a Source #
prjNH :: forall (i :: Nat) (es :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. (KnownNat i, HFunctor (ElemAt i es)) => UnionH es f a -> Maybe (ElemAt i es f a) Source #
weakenH :: forall (any :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH (any ': es) f a Source #
weakensH :: forall (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. IsSuffixOf es es' => UnionH es f a -> UnionH es' f a Source #
weakenNH :: forall (len :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenN len es es' => UnionH es f a -> UnionH es' f a Source #
weakenUnderH :: forall (any :: EffectH) (e :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. UnionH (e ': es) f a -> UnionH (e ': (any ': es)) f a Source #
weakensUnderH :: forall (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenUnder offset es es' => UnionH es f a -> UnionH es' f a Source #
weakenNUnderH :: forall (len :: Natural) (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. WeakenNUnder len offset es es' => UnionH es f a -> UnionH es' f a Source #
strengthenH :: forall (e :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. e <<| es => UnionH (e ': es) f a -> UnionH es f a Source #
strengthensH :: forall (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. Strengthen es es' => UnionH es f a -> UnionH es' f a Source #
strengthenNH :: forall (len :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenN len es es' => UnionH es f a -> UnionH es' f a Source #
strengthenUnderH :: forall (e2 :: EffectH) (e1 :: EffectH) (es :: [EffectH]) (f :: Type -> Type) a. e2 <<| es => UnionH (e1 ': (e2 ': es)) f a -> UnionH (e1 ': es) f a Source #
strengthensUnderH :: forall (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenUnder offset es es' => UnionH es f a -> UnionH es' f a Source #
strengthenNUnderH :: forall (len :: Natural) (offset :: Natural) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. StrengthenNUnder len offset es es' => UnionH es f a -> UnionH es' f a Source #
bundleUnionH :: forall (bundle :: [EffectH]) (es :: [EffectH]) (rest :: [EffectH]) (f :: Type -> Type) a. Split es bundle rest => UnionH es f a -> UnionH (UnionH bundle ': rest) f a Source #
bundleUnionNH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH es f a -> UnionH (UnionH (Take len es) ': Drop len es) f a Source #
unbundleUnionH :: forall (bundle :: [EffectH]) (es :: [EffectH]) (rest :: [EffectH]) (f :: Type -> Type) a. Split es bundle rest => UnionH (UnionH bundle ': rest) f a -> UnionH es f a Source #
unbundleUnionNH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH (UnionH (Take len es) ': Drop len es) f a -> UnionH es f a Source #
bundleUnionUnderH :: forall (offset :: Natural) (bundle :: [EffectH]) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. BundleUnder UnionH offset es es' bundle => UnionH es f a -> UnionH es' f a Source #
bundleUnionNUnderH :: forall (len :: Nat) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownNat len, KnownNat offset) => UnionH es f a -> UnionH (Take offset es ++ (UnionH (Take len (Drop offset es)) ': Drop len (Drop offset es))) f a Source #
unbundleUnionUnderH :: forall (offset :: Natural) (bundle :: [EffectH]) (es :: [EffectH]) (es' :: [EffectH]) (f :: Type -> Type) a. BundleUnder UnionH offset es es' bundle => UnionH es' f a -> UnionH es f a Source #
unbundleUnionNUnderH :: forall (len :: Nat) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownNat len, KnownNat offset) => UnionH (Take offset es ++ (UnionH (Take len (Drop offset es)) ': Drop len (Drop offset es))) f a -> UnionH es f a Source #
bundleAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH '[UnionH es] f a Source #
unbundleAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. UnionH '[UnionH es] f a -> UnionH es f a Source #
prefixUnionH :: forall (any :: [EffectH]) (es :: [EffectH]) (f :: Type -> Type) a. KnownLength any => UnionH es f a -> UnionH (any ++ es) f a Source #
prefixUnionUnderH :: forall (any :: [EffectH]) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownLength any, KnownNat offset) => UnionH es f a -> UnionH (Take offset es ++ (any ++ Drop offset es)) f a Source #
suffixUnionH :: forall (any :: [EffectH]) (es :: [EffectH]) (f :: Type -> Type) a. UnionH es f a -> UnionH (es ++ any) f a Source #
suffixUnionOverNH :: forall (any :: [EffectH]) (offset :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. (KnownLength any, KnownNat offset, KnownLength es) => UnionH es f a -> UnionH (Take (Length es - offset) es ++ (any ++ Drop (Length es - offset) es)) f a Source #
flipAllUnionH :: forall (es :: [EffectH]) (f :: Type -> Type) a. KnownLength es => UnionH es f a -> UnionH (Reverse es) f a Source #
flipUnionH :: forall (len :: Nat) (es :: [EffectH]) (f :: Type -> Type) a. KnownNat len => UnionH es f a -> UnionH (Reverse (Take len es) ++ Drop len es) f a Source #