once

memoization for IO actions and functions https://gitlab.com/kaction/haskell-once

Version on this page:0.2
LTS Haskell 12.18:0.2
Stackage Nightly 2018-11-16:0.3
Latest on Hackage:0.3

See all snapshots once appears in

GPL-3 licensed by Dmitry Bogatov
Maintained by KAction@debian.org

Module documentation for 0.2

Package provides single polymorphic function once, that allows you to memoize IO actions and functions, evaluating them at most once.

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
comments powered byDisqus