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をこのように変更したときにコピーされるのは何ですか?構造体の一部を直接変更するのではなく、レコードの更新は内部的にどのように動作しますか?
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'。何か、何か、何か、完全。 –