On Tue, Aug 24, 2021 at 08:48:53AM +0200, Sylvain Henry wrote:
> Le 24 août 2021 à 06:34, à 06:34, Viktor Dukhovni <[email protected]> a
> écrit:
> >
> >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# #)
>
> You can use cstringLength# which has a constant-folding rules for
> literals. That's what we use in GHC to build FastString literals.
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
--
Viktor.
_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs