distributed-closure-0.3.5: src/Control/Applicative/Static.hs
module Control.Applicative.Static where
import Data.Functor.Static
import Control.Distributed.Closure
import Data.Typeable (Typeable)
-- | Instances of 'StaticApply' should satisfy the following laws (writing
-- 'staticMap', 'staticApply' as infix @('<$>')@, @('<*>')@, respectively):
--
-- @
-- static (.) '<$>' u '<*>' v '<*>' w = u '<*>' (v '<*>' w)
-- x '<*>' (f '<$>' y) = (static (flip (.)) ``cap`` f) '<$>' x '<*>' y
-- f '<$>' (x '<*>' y) = (static (.) ``cap`` f) '<$>' x '<*>' y
-- @
class StaticFunctor f => StaticApply f where
staticApply
:: (Typeable a, Typeable b)
=> f (a -> b)
-> f a
-> f b
class StaticApply f => StaticApplicative f where
staticPure :: Typeable a => a -> f a
instance StaticApply Closure where
staticApply = cap