
Hello, For debugging, I need to dump the inside of `ByteArray#`. Are there any utility functions for this purpose? --Kazu

On Sat, Mar 29, 2025 at 11:25:17AM +0900, Kazu Yamamoto (山本和彦) via Haskell-Cafe wrote:
For debugging, I need to dump the inside of `ByteArray#`. Are there any utility functions for this purpose?
The `SBS` pattern in `Data.ByteString.Short.Internal` wraps up a `ByteArray#` as `ShortByteString`. $ ghci GHCi, version 9.8.1: https://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/viktor/.ghc/ghci.conf λ> import Data.ByteString.Short.Internal λ> :info SBS pattern SBS :: GHC.Prim.ByteArray# -> ShortByteString -- Defined in ‘Data.ByteString.Short.Internal’ λ> What sort of "dump" did you have in mind? A hexadecimal encoding? Something else? -- Viktor.

On Sat, Mar 29, 2025 at 01:38:18PM +1100, Viktor Dukhovni wrote:
On Sat, Mar 29, 2025 at 11:25:17AM +0900, Kazu Yamamoto (山本和彦) via Haskell-Cafe wrote:
For debugging, I need to dump the inside of `ByteArray#`. Are there any utility functions for this purpose?
The `SBS` pattern in `Data.ByteString.Short.Internal` wraps up a `ByteArray#` as `ShortByteString`.
$ ghci GHCi, version 9.8.1: https://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/viktor/.ghc/ghci.conf λ> import Data.ByteString.Short.Internal λ> :info SBS pattern SBS :: GHC.Prim.ByteArray# -> ShortByteString -- Defined in ‘Data.ByteString.Short.Internal’ λ>
What sort of "dump" did you have in mind? A hexadecimal encoding? Something else?
Related combinators I've used at times (so `SBS` is also exported from "Data.ByteString.Short", withour resort to ".Internal"): import qualified Data.Primitive.ByteArray as A import qualified Data.ByteString.Short as SB import Data.Array.Byte (ByteArray(..), MutableByteArray(..)) import Data.ByteString.Short (ShortByteString(SBS)) baToShortByteString :: ByteArray -> ShortByteString baToShortByteString (ByteArray ba) = SBS ba modifyArray :: MutableByteArray s -> Int -> (Word8 -> Word8) -> ST s () modifyArray marr i f = A.readByteArray marr i >>= A.writeByteArray marr i . f sbsToByteArray :: ShortByteString -> ByteArray sbsToByteArray (SBS ba) = (ByteArray ba) sbsToMutableByteArray :: ShortByteString -> ST s (MutableByteArray s) sbsToMutableByteArray sb@(SBS ba) = A.thawByteArray (ByteArray ba) 0 (SB.length sb) -- Viktor.

Hi Viktor,
For debugging, I need to dump the inside of `ByteArray#`. Are there any utility functions for this purpose?
The `SBS` pattern in `Data.ByteString.Short.Internal` wraps up a `ByteArray#` as `ShortByteString`.
Excellent! `SBS` works perfectly to me. Thank you.
What sort of "dump" did you have in mind? A hexadecimal encoding? Something else?
I'm debugging BCrypt hash in "crypton" which fails a test case only on arm64 architecture. I suspect that Context of blowfish created on arm64 is differrent from that on x86_64. `SBS` tells me that they are actually different. So, a bug exists in the functions to create Context. I can take a step forward now. --Kazu
participants (2)
-
Kazu Yamamoto
-
Viktor Dukhovni