struct
    type t = {
      name: string;
      gap_open_penalty: int;
      gap_extension_penalty: int;
    }
    let default = {
      name = "default";
      gap_open_penalty = default_gap_open_penalty;
      gap_extension_penalty = default_gap_extension_penalty;
    }
    let name t = t.name
    let to_json {name; gap_open_penalty; gap_extension_penalty} =
      `Assoc [
        "name"`String name;
        "gap_open_penalty"`Int gap_open_penalty;
        "gap_extension_penalty"`Int gap_extension_penalty;
      ]
  end