12345678910111213141516171819202122232425262728293031moduletypeIdentifier=sigincludeComparableincludeSexpablewithtypet:=tvalto_string:t->stringendmoduleMake(S:Identifier)=structtypet=S.t*Range.t[@@derivingcompare,sexp]letmakeslohi=letopenOr_errorinRange.makelohi>>=funr->Or_error.return(s,r)letseq=fstletsize(_,r)=Range.sizerletto_string(seq,{Range.lo;hi})=sprintf"%s:%d-%d"(S.to_stringseq)lohiendincludeMake(String)letof_strings=tryScanf.sscanfs"%s@:%d-%d"makewithScanf.Scan_failure_->Or_error.errorf"Seq_range.of_string: invalid format %s"s