úÎ!OšK@F      !"#$%&'()*+,-./0123456789:;<=> ? @ A B C D E None &',X_j´ distributed-closure›Type of serializable closures. Abstractly speaking, a closure is a code reference paired together with an environment. A serializable closure includes a  shareable code reference (i.e. a e). Closures can be serialized only if all expressions captured in the environment are serializable.distributed-closure+Values that can be sent across the network.Fdistributed-closurevUntil GHC.StaticPtr can give us a proper TypeRep upon decoding, we have to pretend that this function doesn't need a G constraint to be safe.Hdistributed-closureuUntil GHC.StaticPtr can give us a proper TypeRep upon decoding, we have to pretend that serializing/deserializing a  a without a G a constraint, i.e. for any a , is safe. distributed-closure=Lift a Static pointer to a closure with an empty environment. distributed-closure Resolve a * to the value that it represents. Calling  d multiple times on the same closure is efficient: for most argument values the result is memoized. distributed-closure+Turn a closure into a closure of a closure. distributed-closure6A closure can be created from any serializable value.   corresponds to Control.Applicative's  6, but restricted to lifting serializable values only. distributed-closureClosure application. Note that l is not a functor, let alone an applicative functor, even if it too has a meaningful notion of application.distributed-closureNested closure application.distributed-closure is not a IP, in that we cannot map arbitrary functions over it. That is, we cannot define J=. However, we can map a static pointer to a function over a .   None ,@ACMUVj(<distributed-closure[A newtype-wrapper useful for defining instances of classes indexed by higher-kinded types.distributed-closureÿ½It's often useful to create a static dictionary on-the-fly given any constraint. Morally, all type class constraints have associated static dictionaries, since these are either global values or simple combinations thereof. But GHC doesn't yet know how to invent a static dictionary on-demand yet given any type class constraint, so we'll have to do it manually for the time being. By defining instances of this type class manually, or via   if it becomes too tedious.   0NoneUVj6Idistributed-closure$(cstatic 'foo) is an abbreviation for closure (static foo). distributed-closureAbbreviation for closure (static Dict). Example usage: 5foo :: Closure (Dict (Num a)) -> ... foo $cdict ... Kdistributed-closure!Compute free variables of a type."distributed-closureAuto-generates the @ instances corresponding to the given class instances. Example: îdata T a = T a withStatic [d| instance Show a => Show (T a) where ... |] ======> instance Show a => Show (T a) where ... instance (Static (Show a), Typeable a) => Static (Show (T a)) where closureDict = closure (static (Dict -> Dict))   closureDict !You will probably want to enable FlexibleContexts and ScopedTypeVariables in modules that use ". "4 can also handle non-user generated instances like G instances: just write instance Typeable T. !" !"None8Ï#distributed-closure Instances of ## should satisfy the following laws: $ (static L) = L $ (static (.) ` ` f ` ` g) = $ f . $ g #$#$Nonej<(distributed-closure Instances of (# should satisfy the following laws: * f = $ f . ) ) = * (static L) * f . * g = * (static (.)   f   * g) ) . ) = $ (static )) . ) &'(*)(*)&'None@¬/distributed-closure Instances of /- should satisfy the following laws (writing $, 0 as infix (M), (N), respectively):  static (.) M u N v N w = u N (v N w) x N (f M y) = (static (flip (.)) ` ` f) M x N y f M (x N y) = (static (.) ` ` f) M x N y -./0/0-.None=?jFÞ3distributed-closure Instances of 3- should satisfy the following laws (writing $, 0, 4 as infix (M), (N), (>>=), respectively): $(m >>= f) >>= g = m >>= static (.) ` ` (staticFlippedBind g)   f 5 . 5 = 5 . $ (static 5) where vstaticFlippedBind :: Closure (b -> m c) -> Closure (m b -> m c) staticFlippedBind = capDup (static (flip staticBind)) 2354635426NonejJp9distributed-closure Instances of 9# should satisfy the following laws: :% (static id) (static id) = static id ; (static id) = static id < (static id) = static id :# f g = staticLmap f . staticRmap g 9:;<9:;< NonejJÎ>@?>@? NonejK$BDCBDCO !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJ K L M N O P Q RSTUVWTXYTXZ[TX\T]^TX_`2distributed-closure-0.4.2.0-3quRVmEhHE0EvfQx4L9CdQControl.Distributed.Closure$Control.Distributed.Closure.InternalControl.Distributed.Closure.THData.Functor.StaticControl.Comonad.StaticControl.Applicative.StaticControl.Monad.StaticData.Profunctor.StaticData.Profunctor.Choice.StaticData.Profunctor.Strong.StaticControl.Applicativepure withStatic)constraints-0.11.2-GZMSoVtvnAgCRhZL1gawmDData.ConstraintDictClosure StaticPtrEncodedAp Duplicate Serializableclosure unclosure cduplicatecpurecapcapDupcmap$fBinaryClosure$fIsStaticClosure/->WrappedArrowClosureWrapArrowClosureunwrapClosureArrowStatic closureDict$fStatic(%,,,,,%)$fStatic(%,,,,%)$fStatic(%,,,%)$fStatic(%,,%) $fStatic(%,%)$fBinaryWrappedArrowClosurecstatic cstaticDictcdict cdictFrom StaticFunctor staticMap$fStaticFunctorClosure StaticComonad staticExtract StaticExtendstaticDuplicate staticExtend$fStaticExtendClosure$fStaticComonadClosureStaticApplicative staticPure StaticApply staticApply$fStaticApplyClosure StaticMonad StaticBind staticBind staticJoin staticReturn$fStaticBindClosure$fStaticMonadmStaticProfunctor staticDimap staticLmap staticRmap%$fStaticProfunctorWrappedArrowClosure StaticChoice staticLeft' staticRight'!$fStaticChoiceWrappedArrowClosure StaticStrong staticFirst' staticSecond'!$fStaticStrongWrappedArrowClosure toDynClosurebaseData.Typeable.InternalTypeable putClosureGHC.BaseFunctorfmapfvTid Data.Functor<$><*>