let rec guess_from_filename filename =
match Filename.split_extension filename with
| (f, Some "gz") ->
guess_from_filename f
>>= fun t ->
return (`gzip t)
| (_, Some term) ->
begin match term with
| "gff" -> return (`gff Gff.Tags.default)
| "wig" -> return (`wig Wig.Tags.default)
| "bam" -> return `bam
| "sam" -> return `sam
| "bed" -> return `bed
| "fastq" -> return `fastq
| "fasta" -> return (`fasta Biocaml_fasta.Tags.char_sequence_default)
| "tsv" -> return (`table [`separator '\t'])
| "csv" -> return (`table [`separator ','])
| u -> fail (`extension_unknown u)
end
| (_, None) -> fail (`extension_absent)