-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Allows storing different resource-releasing actions together.
--   
--   SomeDisposable allows storing different resource releasing actions
--   togther in a container. This library is useful for queueing up
--   GHCJS.Foreign.Callback together to be released after a new rendering
--   frame.
@package disposable
@version 0.2.0.4

module Control.Disposable

-- | A <a>Disposable</a> is something with some resources to release
class Disposable a
dispose :: Disposable a => a -> IO ()

-- | Allows storing <a>Disposable</a>s in a heterogenous container
data SomeDisposable
[DisposeNone] :: SomeDisposable
[Dispose] :: forall a. Disposable a => a -> SomeDisposable
[DisposeList] :: forall a. Disposable a => [a] -> SomeDisposable

-- | Allow generic deriving instances of things that can be made into
--   <a>SomeDisposable</a> If a data type derives from Generic, and only
--   contain instances of Disposing, then it can also be made an instance
--   of <a>Disposing</a>. Eg. @ import Glazier.React as R import
--   GHCJS.Foreign.Callback as J import GHC.Generics as G
--   
--   data Plan = Plan { _component :: R.ReactComponent , _onRender ::
--   J.Callback (J.JSVal -&gt; IO J.JSVal) ... } deriving G.Generic
--   instance Disposing Plan @
class Disposing a
disposing :: Disposing a => a -> SomeDisposable
disposing :: (Disposing a, Generic a, GDisposing (Rep a)) => a -> SomeDisposable

-- | Generic instance basically traverses the data type structure and
--   expects the values to be all instances of <a>Disposing</a>
class GDisposing f
gDisposing :: GDisposing f => f p -> DList SomeDisposable
instance Control.Disposable.Disposing Control.Disposable.SomeDisposable
instance Control.Disposable.Disposing (GHCJS.Foreign.Callback.Internal.Callback a)
instance Control.Disposable.Disposing GHC.Types.Int
instance Control.Disposable.Disposing Data.JSString.Internal.Type.JSString
instance Control.Disposable.Disposing GHCJS.Prim.JSVal
instance Control.Disposable.Disposing a => Control.Disposable.Disposing (Data.DList.DList a)
instance Control.Disposable.Disposing c => Control.Disposable.GDisposing (GHC.Generics.K1 i c)
instance Control.Disposable.GDisposing GHC.Generics.U1
instance (Control.Disposable.GDisposing f, Control.Disposable.GDisposing g) => Control.Disposable.GDisposing (f GHC.Generics.:+: g)
instance (Control.Disposable.GDisposing f, Control.Disposable.GDisposing g) => Control.Disposable.GDisposing (f GHC.Generics.:*: g)
instance Control.Disposable.GDisposing f => Control.Disposable.GDisposing (GHC.Generics.M1 i t f)
instance Control.Disposable.Disposable Control.Disposable.SomeDisposable
instance Control.Disposable.Disposable (GHCJS.Foreign.Callback.Internal.Callback a)
