Copyright | (c) Fumiaki Kinoshita 2015 |
---|---|

License | BSD3 |

Maintainer | Fumiaki Kinoshita <fumiexcel@gmail.com> |

Stability | provisional |

Portability | GADTs, Rank2Types |

Safe Haskell | Safe |

Language | Haskell2010 |

- data Instance f g where
- new :: MonadIO m => Object f g -> m (Instance f g)
- newSettle :: MonadIO m => Object f m -> m (Instance f m)
- newSTM :: MonadSTM m => Object f g -> m (Instance f g)
- invokeOn :: (MonadIO m, MonadMask m) => (forall x. g x -> m x) -> Instance f g -> f a -> m a
- invokeOnSTM :: (forall x. g x -> STM x) -> Instance f g -> f a -> STM a
- (.-) :: (MonadIO m, MonadMask m) => Instance f m -> f a -> m a
- (..-) :: MonadSTM m => Instance f STM -> f a -> m a
- snapshot :: (MonadSTM m, Functor g) => Instance f g -> m (Object f g)

# Instantiation

new :: MonadIO m => Object f g -> m (Instance f g) Source

Create a new instance. This can be used inside `unsafePerformIO`

to create top-level instances.

newSettle :: MonadIO m => Object f m -> m (Instance f m) Source

Create a new instance, having it sitting on the current environment.

# Invocation

invokeOn :: (MonadIO m, MonadMask m) => (forall x. g x -> m x) -> Instance f g -> f a -> m a Source

Invoke a method with an explicit landing function.

invokeOnSTM :: (forall x. g x -> STM x) -> Instance f g -> f a -> STM a Source

Invoke a method with an explicit landing function.