getSpareBuffer :: Handle__ -> IO (BufferMode, CharBuffer)
getSpareBuffer Handle__{haCharBuffer=ref,
haBuffers=spare_ref,
haBufferMode=mode}
= do
case mode of
NoBuffering -> return (mode, error "no buffer!")
_ -> do
bufs <- readIORef spare_ref
buf <- readIORef ref
case bufs of
BufferListCons b rest -> do
writeIORef spare_ref rest
return (mode, emptyBuffer b (bufSize buf) WriteBuffer)
BufferListNil -> do
new_buf <- newCharBuffer (bufSize buf) WriteBuffer
return (mode, new_buf)
的代碼是從GHC源代碼。我想知道爲什麼這段代碼的作者使用大括號代替參數。以及變量haCharBuffer,haBuffers,haBufferMode如何從ref,spare_ref和mode中獲取值。這些值尚未定義。所述的CodeFile是GHC-7.4.1 \庫\基\ GHC \ IO \拉手\ Text.hs
從GHC需要澄清的代碼的另一種片段是這樣的:
flushByteWriteBuffer :: Handle__ -> IO()
flushByteWriteBuffer [email protected]__{..} = do
bbuf <- readIORef haByteBuffer
when (not (isEmptyBuffer bbuf)) $ do
bbuf' <- Buffered.flushWriteBuffer haDevice bbuf
writeIORef haByteBuffer bbuf'
在的CodeFile ghc- 7.4.1 \ libraries \ base \ GHC \ IO \ Handle \ Internals.hs 大括號內是否使用了點?
感謝
因爲我編輯了這個問題,你能回答第二部分關於帶點內部大括號的大括號嗎?謝謝 – Dragno 2012-07-21 14:01:09
請參閱我的編輯瞭解更多。 – dflemstr 2012-07-21 14:31:38
好的非常感謝。 – Dragno 2012-07-21 18:19:21