-- 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)