123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293openRresultletparse_fieldffieldx=tryR.ok(fx)with_->R.error_msgf"Failed to parse field %s"fieldletparse_int=parse_fieldInt.of_stringletparse_float=parse_fieldFloat.of_stringmoduleXls=structtypeitem=[|`Commentofstring|`Recordofrecord|`Header]andrecord={chr:string;start:int;end_:int;length:int;abs_summit:int;pileup:float;log10pvalue:float;fold_enrichment:float;log10qvalue:float;name:string;}letheader="chr\tstart\tend\tlength\tabs_summit\tpileup\t-log10(pvalue)\tfold_enrichment\t-log10(qvalue)\tname"letparseline=match(line:Line.t:>string)with|""->R.ok(`Comment"")|linewhenString.(line=header)->R.ok`Header|line->ifChar.(line.[0]='#')thenR.ok(`Comment(String.subline~pos:1~len:(String.lengthline-1)))elsematchString.split~on:'\t'linewith|[chr;start;end_;length;abs_summit;pileup;log10pvalue;fold_enrichment;log10qvalue;name]->parse_int"start"start>>=funstart->parse_int"end"end_>>=funend_->parse_int"length"length>>=funlength->parse_int"abs_summit"abs_summit>>=funabs_summit->parse_float"pileup"pileup>>=funpileup->parse_float"log10pvalue"log10pvalue>>=funlog10pvalue->parse_float"log10qvalue"log10qvalue>>=funlog10qvalue->parse_float"fold_enrichment"fold_enrichment>>|funfold_enrichment->`Record{chr;start;end_;length;abs_summit;pileup;log10pvalue;fold_enrichment;log10qvalue;name;}|_->R.error_msg"Wrong number of fields"endmoduleBroad_peaks=structtypeitem={chr:string;chr_start:int;chr_end:int;name:string;score:int;strand:string;fold_change:float;log10pvalue:float;log10qvalue:float;}letparseline=matchLine.split~on:'\t'linewith|[chr;chr_start;chr_end;name;score;strand;fold_change;log10pvalue;log10qvalue]->parse_int"start"chr_start>>=funchr_start->parse_int"end"chr_end>>=funchr_end->parse_int"score"score>>=funscore->parse_float"log10pvalue"log10pvalue>>=funlog10pvalue->parse_float"log10qvalue"log10qvalue>>=funlog10qvalue->parse_float"fold_change"fold_change>>|funfold_change->{chr;chr_start;chr_end;name;score;strand;log10pvalue;fold_change;log10qvalue;}|_->R.error_msg"Wrong number of fields"end