(extend type (x) (scheme.bytes? x)
  'binary)
(extend ac-literal (x) (errsafe:isa x 'binary)
  scheme-t)
(extend coerce (x totype . args) (is totype 'binary)
  (case (type x)
    binary x
    string (scheme.string->bytes/utf-8 x)
           (err "Can't coerce" x type)))
(def binary (x)
  (coerce x 'binary))
(extend coerce (x totype . args) (isa x 'binary)
  (case totype
    binary x
    string (scheme.bytes->string/utf-8 x)
           (err "Can't coerce" x type)))
(extend len (x) (isa x 'binary)
  (scheme.bytes-length x))
This hack adds PLT Scheme’s byte strings as a “binary” type in Arc.
I suspect that having a separate data type to store binary data is going in the wrong direction for Arc, but I needed to get the byte length of a Unicode encoded string to generate a Content-Length header and this was a quick and lazy way to do that.
This hack depends on arc3.1 and scheme0.
Same as Arc.