| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Control.Distributed.Closure
Contents
Description
Serializable closures for distributed programming.
- type Serializable a = (Binary a, Typeable a)
- data Closure a
- closure :: StaticPtr a -> Closure a
- unclosure :: Closure a -> a
- cpure :: Closure (Dict (Serializable a)) -> a -> Closure a
- cap :: Typeable a => Closure (a -> b) -> Closure a -> Closure b
- cmap :: Typeable a => StaticPtr (a -> b) -> Closure a -> Closure b
- data Dict a :: Constraint -> * where
Documentation
type Serializable a = (Binary a, Typeable a) Source
Values that can be sent across the network.
Closures
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 StaticPtr). Closures can be
serialized only if all expressions captured in the environment are
serializable.
closure :: StaticPtr a -> Closure a Source
Lift a Static pointer to a closure with an empty environment.
cpure :: Closure (Dict (Serializable a)) -> a -> Closure a Source
A closure can be created from any serializable value. cpure corresponds
to Control.Applicative's pure, but restricted to
lifting serializable values only.
cap :: Typeable a => Closure (a -> b) -> Closure a -> Closure b Source
Closure application. Note that Closure is not a functor, let alone an
applicative functor, even if it too has a meaningful notion of application.
Closure dictionaries
A Dict reifies a constraint in the form of a first class value. The Dict
type is not serializable: how do you serialize the constraint that values of
this type carry? However, for any constraint c, a value of type can be serialized and sent over the wire, just like any
Closure
(Dict c)Closure. A serializable dictionary for some constraint c is a value of
type .Closure (Dict c)
data Dict a :: Constraint -> * where
Values of type capture a dictionary for a constraint of type Dict pp.
e.g.
Dict::Dict(EqInt)
captures a dictionary that proves we have an:
instance Eq 'Int
Pattern matching on the Dict constructor will bring this instance into scope.
Instances
| a :=> (Read (Dict a)) | |
| a :=> (Monoid (Dict a)) | |
| a :=> (Enum (Dict a)) | |
| a :=> (Bounded (Dict a)) | |
| () :=> (Eq (Dict a)) | |
| () :=> (Ord (Dict a)) | |
| () :=> (Show (Dict a)) | |
| a => Bounded (Dict a) | |
| a => Enum (Dict a) | |
| Eq (Dict a) | |
| (Typeable Constraint p, p) => Data (Dict p) | |
| Ord (Dict a) | |
| a => Read (Dict a) | |
| Show (Dict a) | |
| a => Monoid (Dict a) |