Как используются фигурные скобки в Haskell?

Код ниже

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 Какая польза от точек внутри фигурных скобок?

Спасибо

6
задан Dragno 21 July 2012 в 12:40
поделиться