-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Memory-backed handles
--   
--   Create memory-backed Handles, referencing virtual files. This
--   is mostly useful for testing Handle-based APIs without having
--   to interact with the filesystem.
--   
--   
--   import Data.ByteString (pack)
--   import Data.Knob
--   import System.IO
--   
--   main = do
--       knob <- newKnob (pack [])
--       h <- newFileHandle knob "test.txt" WriteMode
--       hPutStrLn h "Hello world!"
--       hClose h
--       bytes <- Data.Knob.getContents knob
--       putStrLn ("Wrote bytes: " ++ show bytes)
--   
@package knob
@version 0.1.1

-- | Create memory‐backed Handles, referencing virtual files. This
--   is mostly useful for testing Handle‐based APIs without having
--   to interact with the filesystem.
--   
--   
--   import Data.ByteString (pack)
--   import Data.Knob
--   import System.IO
--   
--   main = do
--       knob <- newKnob (pack [])
--       h <- newFileHandle knob "test.txt" WriteMode
--       hPutStrLn h "Hello world!"
--       hClose h
--       bytes <- Data.Knob.getContents knob
--       putStrLn ("Wrote bytes: " ++ show bytes)
--   
module Data.Knob

-- | A knob is a basic virtual file, which contains a byte buffer. A knob
--   can have multiple Handles open to it, each of which behaves
--   like a standard file handle.
--   
--   Use getContents and setContents to inspect and modify
--   the knob’s byte buffer.
data Knob
newKnob :: MonadIO m => ByteString -> m Knob
getContents :: MonadIO m => Knob -> m ByteString
setContents :: MonadIO m => Knob -> ByteString -> m ()

-- | Create a new Handle pointing to a Knob. This handle
--   behaves like a file-backed handle for most purposes.
newFileHandle :: MonadIO m => Knob -> String -> IOMode -> m Handle

-- | See newFileHandle.
withFileHandle :: MonadIO m => Knob -> String -> IOMode -> (Handle -> IO a) -> m a
instance Typeable Device
instance BufferedIO Device
instance IODevice Device
