anchor.diff:  is_uuid(MaybeUUID) ->
     re:run(MaybeUUID, ?UUID_REGEX) =/= nomatch.
   
  +-spec random() -> type().
  +random() ->
  +  <<Rand1:48, _:4, Rand2:12, _:2, Rand3:62>> =
  +    crypto:strong_rand_bytes(16),
  +  UUIDBin = <<Rand1:48,
  +              0:1, 1:1, 0:1, 0:1,  % version 4 bits
  +              Rand2:12,
  +              1:1, 0:1,            % RFC 4122 variant bits
  +              Rand3:62>>,
  +  ?CONSTRUCTOR(uuid_to_string(UUIDBin)).
  +
   %%------------------------------------------------------------------------------
   %% Protocols
   %%------------------------------------------------------------------------------
  
positive.code:   erlang:phash2(Str).
  
  str(#?TYPE{name = ?M, data = UUID}) -> UUID.
  
negative.code: -behavior('clojerl.Stringable').
  -behavior('clojerl.IHash').
  
  -export([?CONSTRUCTOR/1, random/0]).
  
  -export([hash/1]).
  -export([str/1]).
  