On Tue, Aug 24, 2021 at 09:03:30AM -0400, Viktor Dukhovni wrote: I originally wrote:
> > >Is there any GHC syntax for constructing a primitive string literal > > >with a known (not hand coded) byte count? > > >With `"some bytes"#` I get just the `Addr#` pointer, but not the size. > > > > > >If there's nothing available, would it be reasonable to introduce a new > > >syntax? > > >Perhaps: > > > > > > "some bytes"## :: (# Addr#, Int# #) But neglected to mention that I knew about `cstringLength#`, but found it wanting, because it does not support octet-strings with embedded NUL characters: > Sadly, that does not work when the primitive octet string contains > internal NUL bytes. > > λ> :set -package ghc-prim > λ> :set -XMagicHash > λ> import GHC.CString > λ> import GHC.Int > λ> > λ> I# (cstringLength# "foobar\xa0"#) > 7 > λ> I# (cstringLength# "foo\0bar\xa0"#) > 3 If there isn't some other extant work-around, any feedback on my proposal of a new syntax for a primitive unboxed (address, length) pair: "some bytes"## :: (# Addr#, Int# #) -- Viktor. _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs