From efcd05bef626d7bdf4b8aef74537b309a4c909c1 Mon Sep 17 00:00:00 2001 From: Andrew Martin Date: Thu, 31 Jul 2025 08:37:23 -0400 Subject: [PATCH] Add hPut --- CHANGELOG.md | 4 ++++ bytebuild.cabal | 2 +- src/Data/Bytes/Builder.hs | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5be4b32..f17cbd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ Note: Prior to version 0.3.4.0, this library was named `small-bytearray-builder` is now just a compatibility shim to ease the migration process. +## 0.3.17.0 + +* Add `hPut` to help with common case of pushing logs to stderr. + ## 0.3.16.3 * Add support for building with GHC 9.10 diff --git a/bytebuild.cabal b/bytebuild.cabal index 059f8c7..33ec392 100644 --- a/bytebuild.cabal +++ b/bytebuild.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: bytebuild -version: 0.3.16.3 +version: 0.3.17.0 synopsis: Build byte arrays description: This is similar to the builder facilities provided by diff --git a/src/Data/Bytes/Builder.hs b/src/Data/Bytes/Builder.hs index 1a89a4a..667ff49 100644 --- a/src/Data/Bytes/Builder.hs +++ b/src/Data/Bytes/Builder.hs @@ -167,6 +167,9 @@ module Data.Bytes.Builder -- * Rebuild , rebuild + + -- * IO + , hPut ) where import Prelude hiding (replicate) @@ -209,6 +212,7 @@ import GHC.Natural (naturalFromInteger, naturalToInteger) import GHC.ST (ST (ST)) import GHC.Word (Word (W#), Word8 (W8#)) import Numeric.Natural (Natural) +import System.IO (Handle) import qualified Compat as C @@ -217,6 +221,7 @@ import qualified Arithmetic.Types as Arithmetic import qualified Data.Bytes as Bytes import qualified Data.Bytes.Builder.Bounded as Bounded import qualified Data.Bytes.Builder.Bounded.Unsafe as UnsafeBounded +import qualified Data.Bytes.Chunks as Chunks import qualified Data.Primitive as PM import qualified Data.Text.Short as TS import qualified GHC.Exts as Exts @@ -1557,3 +1562,7 @@ rebuild :: Builder -> Builder {-# INLINE rebuild #-} rebuild (Builder f) = Builder $ oneShot $ \a -> oneShot $ \b -> oneShot $ \c -> oneShot $ \d -> oneShot $ \e -> f a b c d e + +hPut :: Handle -> Builder -> IO () +{-# NOINLINE hPut #-} +hPut h = Chunks.hPut h . run 256