class BooleanParser extends AbstractColumnParser<Boolean> {

  // A more restricted set of 'false' strings that is used for column type detection
  private static final List<String> FALSE_STRINGS_FOR_DETECTION =
      Arrays.asList("F", "f", "N", "n", "FALSE", "false", "False");

  // A more restricted set of 'true' strings that is used for column type detection
  private static final List<String> TRUE_STRINGS_FOR_DETECTION =
      Arrays.asList("T", "t", "Y", "y", "TRUE", "true", "True");

  // These Strings will convert to true booleans
  private static final List<String> TRUE_STRINGS =
      Arrays.asList("T", "t", "Y", "y", "TRUE", "true", "True", "1");

  // These Strings will convert to false booleans
  private static final List<String> FALSE_STRINGS =
      Arrays.asList("F", "f", "N", "n", "FALSE", "false", "False", "0");

  public BooleanParser(ColumnType columnType) {
    super(columnType);
  }

  public BooleanParser(BooleanColumnType booleanColumnType, ReadOptions readOptions) {
    super(booleanColumnType);
    if (readOptions.missingValueIndicators().length > 0) {
      missingValueStrings = Lists.newArrayList(readOptions.missingValueIndicators());
    }
  }

  @Override
  public boolean canParse(String s) {
    if (isMissing(s)) {
      return true;
    }
    return TRUE_STRINGS_FOR_DETECTION.contains(s) || FALSE_STRINGS_FOR_DETECTION.contains(s);
  }

  @Override
  public Boolean parse(String s) {<FILL_FUNCTION_BODY>}

  @Override
  public byte parseByte(String s) {
    if (isMissing(s)) {
      return MISSING_VALUE;
    } else if (TRUE_STRINGS.contains(s)) {
      return BYTE_TRUE;
    } else if (FALSE_STRINGS.contains(s)) {
      return BYTE_FALSE;
    } else {
      throw new IllegalArgumentException(
          "Attempting to convert non-boolean value " + s + " to Boolean");
    }
  }
}

    if (isMissing(s)) {
      return null;
    } else if (TRUE_STRINGS.contains(s)) {
      return true;
    } else if (FALSE_STRINGS.contains(s)) {
      return false;
    } else {
      throw new IllegalArgumentException(
          "Attempting to convert non-boolean value " + s + " to Boolean");
    }
  
<methods>public void <init>(tech.tablesaw.api.ColumnType) ,public abstract boolean canParse(java.lang.String) ,public tech.tablesaw.api.ColumnType columnType() ,public boolean isMissing(java.lang.String) ,public abstract java.lang.Boolean parse(java.lang.String) ,public byte parseByte(java.lang.String) ,public double parseDouble(java.lang.String) ,public float parseFloat(java.lang.String) ,public int parseInt(java.lang.String) ,public long parseLong(java.lang.String) ,public short parseShort(java.lang.String) ,public void setMissingValueStrings(List<java.lang.String>) <variables>private final non-sealed tech.tablesaw.api.ColumnType columnType,protected List<java.lang.String> missingValueStrings