# racket-bitsyntax Adds library support for slices and splices of byte-vectors to Racket, and adds syntax for pattern-matching such bit-strings, inspired by Erlang's binary pattern-matching: - - Here's a Racket equivalent of the example given in the Erlang documentation: (bit-string-case datagram [( (= IP-VERSION :bits 4) (? header-length :bits 4) (? service-type) (? total-length :bits 16) (? id :bits 16) (? flags :bits 3) (? fragment-offset :bits 13) (? ttl) (? protocol) (? header-checksum :bits 16) (? source-ip :bits 32) (? destination-ip :bits 32) (? rest :binary) ) (when (and (>= header-length 5) (>= (bit-string-length datagram) (* header-length 4)))) (let ((options-length (* 4 (- header-length IP-MINIMUM-HEADER-LENGTH)))) (bit-string-case rest [( (? opts :binary :bytes options-length) (? data :binary) ) 'datagram-valid]))] [else 'datagram-not-valid])