/// Grading rules for typed spelling answers. abstract final class SpellingAnswerPolicy { static bool matches(String typed, String canonical) { return typed.trim().toLowerCase() == canonical.trim().toLowerCase(); } }