let string_to_char_seq_raw_item
      ?filename ?(tags=Tags.char_sequence_default) () =
    let check_alphabet ~pos s = match tags.Tags.sequence with
      | `int_sequence
      | `char_sequence None ->
        output_ok (`partial_sequence s)
      | `char_sequence (Some alphabet) ->
        if String.for_all s ~f:(List.mem alphabet) then
          output_ok (`partial_sequence s)
        else
          output_error (`malformed_partial_sequence (pos,s))
    in
    let string_to_partial_sequence ~pos s =
      match tags.Tags.max_items_per_line with
      | Some n ->
        if String.length s > n then
          output_error (`sequence_is_too_long (pos,s))
        else
          check_alphabet ~pos s
      | None -> check_alphabet ~pos s
    in
    string_to_raw_item
      ~string_to_partial_sequence
      ?filename
      ~tags
      ()