Код ниже
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, replace _ref и mode. Эти значения не определены. Кодовый файл: ghc -7.4.1\libraries\base\GHC\IO\Handle\Text.hs
Еще один фрагмент кода GHC, нуждающийся в пояснении, это:
flushByteWriteBuffer :: Handle__ -> IO ()
flushByteWriteBuffer h_@Handle__{..} = do
bbuf <- readIORef haByteBuffer
when (not (isEmptyBuffer bbuf)) $ do
bbuf' <- Buffered.flushWriteBuffer haDevice bbuf
writeIORef haByteBuffer bbuf'
В кодовом файле ghc -7.4.1\libraries\base\GHC\IO\Handle\Internals.hs Какая польза от точек внутри фигурных скобок?
Спасибо