-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | memoization for IO actions and functions -- -- Please see Control.Once for examples @package once @version 0.2 -- | This module expors single polymorphic function once, that -- allows you to memoize IO actions and functions, evaluating them at -- most once. Here is example: -- --
--   >>> let mkStamp = (putStrLn "stamping" >> writeFile "/tmp/stamp" "") :: IO ()
--   
--   >>> -- onceStamp :: IO ()
--   
--   >>> onceStamp <- once mkStamp
--   
--   >>> -- onceStamp actually evaluates mkStamp it wraps first time.
--   
--   >>> onceStamp
--   stamping
--   
--   >>> -- but second time result `()' is memoized, no action is performed.
--   
--   >>> onceStamp
--   
--   >>> -- we can memoize functions too
--   
--   >>> foo <- once $ \x -> print "foo" >> print (x :: Int)
--   
--   >>> -- action will be performed once for every distinct argument
--   
--   >>> foo 10
--   foo
--   10
--   
--   >>> foo 10
--   10
--   
--   >>> foo 4
--   foo
--   4
--   
module Control.Once -- | memoize IO action or function returning IO to be peformed only once. -- -- Any IO action is suitable, as is any function with -- Hashable arguments, returning value in IO monad. Value of any -- of type below are okay to pass to once: -- --
--   IO Int
--   Int -> IO ()
--   Int -> Double -> IO (Char -> Int)
--   
-- -- Due implementation limitations, only up to 7 arguments are supported. once :: Once a => a -> IO a instance (GHC.Classes.Eq a0, Data.Hashable.Class.Hashable a0) => Control.Once.Class.Once (a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1) => Control.Once.Class.Once (a1 -> a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, GHC.Classes.Eq a2, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1, Data.Hashable.Class.Hashable a2) => Control.Once.Class.Once (a2 -> a1 -> a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, GHC.Classes.Eq a2, GHC.Classes.Eq a3, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1, Data.Hashable.Class.Hashable a2, Data.Hashable.Class.Hashable a3) => Control.Once.Class.Once (a3 -> a2 -> a1 -> a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, GHC.Classes.Eq a2, GHC.Classes.Eq a3, GHC.Classes.Eq a4, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1, Data.Hashable.Class.Hashable a2, Data.Hashable.Class.Hashable a3, Data.Hashable.Class.Hashable a4) => Control.Once.Class.Once (a4 -> a3 -> a2 -> a1 -> a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, GHC.Classes.Eq a2, GHC.Classes.Eq a3, GHC.Classes.Eq a4, GHC.Classes.Eq a5, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1, Data.Hashable.Class.Hashable a2, Data.Hashable.Class.Hashable a3, Data.Hashable.Class.Hashable a4, Data.Hashable.Class.Hashable a5) => Control.Once.Class.Once (a5 -> a4 -> a3 -> a2 -> a1 -> a0 -> GHC.Types.IO r0) instance (GHC.Classes.Eq a0, GHC.Classes.Eq a1, GHC.Classes.Eq a2, GHC.Classes.Eq a3, GHC.Classes.Eq a4, GHC.Classes.Eq a5, GHC.Classes.Eq a6, Data.Hashable.Class.Hashable a0, Data.Hashable.Class.Hashable a1, Data.Hashable.Class.Hashable a2, Data.Hashable.Class.Hashable a3, Data.Hashable.Class.Hashable a4, Data.Hashable.Class.Hashable a5, Data.Hashable.Class.Hashable a6) => Control.Once.Class.Once (a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a0 -> GHC.Types.IO r0) instance Control.Once.Class.Once (GHC.Types.IO a)