data Thing = Thing {a :: Int, b :: Int, c :: Int, (...) , z :: Int} deriving Show
foo = Thing 1 2 3 4 5 (...) 26
mkBar x = x { c = 30 }
main = do print $ mkBar foo
जब मैं इस तरह foo को mutate करता हूं तो क्या कॉपी किया जाता है? एक संरचना के हिस्से को सीधे उत्परिवर्तित करने के विरोध में।रिकॉर्ड अपडेट आंतरिक रूप से कैसे व्यवहार करते हैं?
Data Thing = Thing {a :: IORef Int, b :: IORef Int, (...) , z :: IORef Int}
instance Show Thing where
(...something something unsafePerformIO...)
mkFoo = do a <- newIORef 1
(...)
z <- newIORef 26
return Thing a b (...) z
mkBar x = writeIORef (c x) 30
main = do foo <- mkFoo
mkBar foo
print foo
अनुकूलन के साथ संकलन इस व्यवहार को बदलता है?
कुछ, कुछ, कुछ, 'unsafePerformIO'। कुछ, कुछ, कुछ, पूरा हो गया। –