5
緩存內部想象這樣的功能:具有部分應用函數
bar :: Foo -> A -> B -> C -> IO()
即函數執行一些IO
使用Foo
和其他值的東西。該Foo
值必須被傳遞到bar
,並且可以從IO
從這個被檢索:現在
foo :: X -> IO Foo
,A
,B
,C
和X
都是純純值。使用X
值
bar :: X -> A -> B -> C -> IO()
而且Foo
將在bar
功能產生:我寧願喜歡這樣的bar
功能。如果我這樣做:
let f = bar myX
f :: A -> B -> C -> IO()
。如果我多次調用該函數,X
的值由於部分應用程序而保持不變,但由於它是IO
效果,因此每次都會生成該值。是否有一個本地,內置-GHC執行某種緩存方式,使生成Foo
值一次 - 爲生成的封?我想這是所有拳擊相關的,但我從來沒有想出如何做到這一點,而不使用髒IORef
,擴大bar
,這是醜陋的參數。
是啊,我知道了'unsafeScheisse'功能,我不希望出現這種情況。你的解決方案讓我想到我經常使用的東西,比如傳遞給'control'的函數。我喜歡它,這聽起來很有希望。 – phaazon 2014-09-04 11:18:23