diff --git a/src/ast/bool_literal.cc b/src/ast/bool_literal.cc
index 3fba92d..a40d99a 100644
--- a/src/ast/bool_literal.cc
+++ b/src/ast/bool_literal.cc
@@ -22,10 +22,6 @@
 
 BoolLiteral::~BoolLiteral() = default;
 
-bool BoolLiteral::IsBool() const {
-  return true;
-}
-
 std::string BoolLiteral::to_str() const {
   return value_ ? "true" : "false";
 }
diff --git a/src/ast/bool_literal.h b/src/ast/bool_literal.h
index 9591470..2700531 100644
--- a/src/ast/bool_literal.h
+++ b/src/ast/bool_literal.h
@@ -31,9 +31,6 @@
   BoolLiteral(ast::type::Type* type, bool value);
   ~BoolLiteral() override;
 
-  /// @returns true if this is a bool literal
-  bool IsBool() const override;
-
   /// @returns true if the bool literal is true
   bool IsTrue() const { return value_; }
   /// @returns true if the bool literal is false
diff --git a/src/ast/bool_literal_test.cc b/src/ast/bool_literal_test.cc
index 1a09808..63fe663 100644
--- a/src/ast/bool_literal_test.cc
+++ b/src/ast/bool_literal_test.cc
@@ -14,8 +14,12 @@
 
 #include "src/ast/bool_literal.h"
 
+#include "src/ast/float_literal.h"
+#include "src/ast/null_literal.h"
+#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/bool_type.h"
+#include "src/ast/uint_literal.h"
 
 namespace tint {
 namespace ast {
@@ -26,7 +30,7 @@
 TEST_F(BoolLiteralTest, True) {
   ast::type::BoolType bool_type;
   BoolLiteral b{&bool_type, true};
-  ASSERT_TRUE(b.IsBool());
+  ASSERT_TRUE(b.Is<BoolLiteral>());
   ASSERT_TRUE(b.IsTrue());
   ASSERT_FALSE(b.IsFalse());
 }
@@ -34,7 +38,7 @@
 TEST_F(BoolLiteralTest, False) {
   ast::type::BoolType bool_type;
   BoolLiteral b{&bool_type, false};
-  ASSERT_TRUE(b.IsBool());
+  ASSERT_TRUE(b.Is<BoolLiteral>());
   ASSERT_FALSE(b.IsTrue());
   ASSERT_TRUE(b.IsFalse());
 }
@@ -42,12 +46,13 @@
 TEST_F(BoolLiteralTest, Is) {
   ast::type::BoolType bool_type;
   BoolLiteral b{&bool_type, false};
-  EXPECT_TRUE(b.IsBool());
-  EXPECT_FALSE(b.IsSint());
-  EXPECT_FALSE(b.IsFloat());
-  EXPECT_FALSE(b.IsUint());
-  EXPECT_FALSE(b.IsInt());
-  EXPECT_FALSE(b.IsNull());
+  Literal* l = &b;
+  EXPECT_TRUE(l->Is<BoolLiteral>());
+  EXPECT_FALSE(l->Is<SintLiteral>());
+  EXPECT_FALSE(l->Is<FloatLiteral>());
+  EXPECT_FALSE(l->Is<UintLiteral>());
+  EXPECT_FALSE(l->Is<IntLiteral>());
+  EXPECT_FALSE(l->Is<NullLiteral>());
 }
 
 TEST_F(BoolLiteralTest, ToStr) {
diff --git a/src/ast/float_literal.cc b/src/ast/float_literal.cc
index d7b6a31..70ba92e 100644
--- a/src/ast/float_literal.cc
+++ b/src/ast/float_literal.cc
@@ -25,10 +25,6 @@
 
 FloatLiteral::~FloatLiteral() = default;
 
-bool FloatLiteral::IsFloat() const {
-  return true;
-}
-
 std::string FloatLiteral::to_str() const {
   return std::to_string(value_);
 }
diff --git a/src/ast/float_literal.h b/src/ast/float_literal.h
index d8b69e4..411deaa 100644
--- a/src/ast/float_literal.h
+++ b/src/ast/float_literal.h
@@ -31,9 +31,6 @@
   FloatLiteral(ast::type::Type* type, float value);
   ~FloatLiteral() override;
 
-  /// @returns true if this is a float literal
-  bool IsFloat() const override;
-
   /// @returns the float literal value
   float value() const { return value_; }
 
diff --git a/src/ast/float_literal_test.cc b/src/ast/float_literal_test.cc
index cc5d55f..568df88 100644
--- a/src/ast/float_literal_test.cc
+++ b/src/ast/float_literal_test.cc
@@ -14,8 +14,12 @@
 
 #include "src/ast/float_literal.h"
 
+#include "src/ast/bool_literal.h"
+#include "src/ast/null_literal.h"
+#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/f32_type.h"
+#include "src/ast/uint_literal.h"
 
 namespace tint {
 namespace ast {
@@ -26,19 +30,20 @@
 TEST_F(FloatLiteralTest, Value) {
   ast::type::F32Type f32;
   FloatLiteral f{&f32, 47.2f};
-  ASSERT_TRUE(f.IsFloat());
+  ASSERT_TRUE(f.Is<FloatLiteral>());
   EXPECT_EQ(f.value(), 47.2f);
 }
 
 TEST_F(FloatLiteralTest, Is) {
   ast::type::F32Type f32;
   FloatLiteral f{&f32, 42.f};
-  EXPECT_FALSE(f.IsBool());
-  EXPECT_FALSE(f.IsSint());
-  EXPECT_FALSE(f.IsInt());
-  EXPECT_TRUE(f.IsFloat());
-  EXPECT_FALSE(f.IsUint());
-  EXPECT_FALSE(f.IsNull());
+  Literal* l = &f;
+  EXPECT_FALSE(l->Is<BoolLiteral>());
+  EXPECT_FALSE(l->Is<SintLiteral>());
+  EXPECT_FALSE(l->Is<IntLiteral>());
+  EXPECT_TRUE(l->Is<FloatLiteral>());
+  EXPECT_FALSE(l->Is<UintLiteral>());
+  EXPECT_FALSE(l->Is<NullLiteral>());
 }
 
 TEST_F(FloatLiteralTest, ToStr) {
diff --git a/src/ast/int_literal.cc b/src/ast/int_literal.cc
index 20480d2..bb86821 100644
--- a/src/ast/int_literal.cc
+++ b/src/ast/int_literal.cc
@@ -21,9 +21,5 @@
 
 IntLiteral::~IntLiteral() = default;
 
-bool IntLiteral::IsInt() const {
-  return true;
-}
-
 }  // namespace ast
 }  // namespace tint
diff --git a/src/ast/int_literal.h b/src/ast/int_literal.h
index d23fceb..e2f5c66 100644
--- a/src/ast/int_literal.h
+++ b/src/ast/int_literal.h
@@ -27,9 +27,6 @@
  public:
   ~IntLiteral() override;
 
-  /// @returns true if this is a signed or unsigned integer.
-  bool IsInt() const override;
-
  protected:
   /// Constructor
   /// @param type the type of the literal
diff --git a/src/ast/int_literal_test.cc b/src/ast/int_literal_test.cc
index 8b2190e..f002d49 100644
--- a/src/ast/int_literal_test.cc
+++ b/src/ast/int_literal_test.cc
@@ -14,6 +14,9 @@
 
 #include "src/ast/int_literal.h"
 
+#include "src/ast/bool_literal.h"
+#include "src/ast/float_literal.h"
+#include "src/ast/null_literal.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/i32_type.h"
@@ -29,13 +32,13 @@
 TEST_F(IntLiteralTest, Sint_IsInt) {
   ast::type::I32Type i32;
   SintLiteral i{&i32, 47};
-  ASSERT_TRUE(i.IsInt());
+  ASSERT_TRUE(i.Is<IntLiteral>());
 }
 
 TEST_F(IntLiteralTest, Uint_IsInt) {
   ast::type::I32Type i32;
   UintLiteral i{&i32, 42};
-  EXPECT_TRUE(i.IsInt());
+  EXPECT_TRUE(i.Is<IntLiteral>());
 }
 
 }  // namespace
diff --git a/src/ast/literal.cc b/src/ast/literal.cc
index 35733c7..9b7b892 100644
--- a/src/ast/literal.cc
+++ b/src/ast/literal.cc
@@ -14,15 +14,6 @@
 
 #include "src/ast/literal.h"
 
-#include <assert.h>
-
-#include "src/ast/bool_literal.h"
-#include "src/ast/float_literal.h"
-#include "src/ast/int_literal.h"
-#include "src/ast/null_literal.h"
-#include "src/ast/sint_literal.h"
-#include "src/ast/uint_literal.h"
-
 namespace tint {
 namespace ast {
 
@@ -30,60 +21,6 @@
 
 Literal::~Literal() = default;
 
-bool Literal::IsBool() const {
-  return false;
-}
-
-bool Literal::IsFloat() const {
-  return false;
-}
-
-bool Literal::IsInt() const {
-  return false;
-}
-
-bool Literal::IsSint() const {
-  return false;
-}
-
-bool Literal::IsNull() const {
-  return false;
-}
-
-bool Literal::IsUint() const {
-  return false;
-}
-
-BoolLiteral* Literal::AsBool() {
-  assert(IsBool());
-  return static_cast<BoolLiteral*>(this);
-}
-
-FloatLiteral* Literal::AsFloat() {
-  assert(IsFloat());
-  return static_cast<FloatLiteral*>(this);
-}
-
-IntLiteral* Literal::AsInt() {
-  assert(IsInt());
-  return static_cast<IntLiteral*>(this);
-}
-
-SintLiteral* Literal::AsSint() {
-  assert(IsSint());
-  return static_cast<SintLiteral*>(this);
-}
-
-NullLiteral* Literal::AsNull() {
-  assert(IsNull());
-  return static_cast<NullLiteral*>(this);
-}
-
-UintLiteral* Literal::AsUint() {
-  assert(IsUint());
-  return static_cast<UintLiteral*>(this);
-}
-
 bool Literal::IsValid() const {
   return true;
 }
diff --git a/src/ast/literal.h b/src/ast/literal.h
index b8c1b7c..4e3ff0f 100644
--- a/src/ast/literal.h
+++ b/src/ast/literal.h
@@ -23,44 +23,11 @@
 namespace tint {
 namespace ast {
 
-class BoolLiteral;
-class FloatLiteral;
-class NullLiteral;
-class SintLiteral;
-class IntLiteral;
-class UintLiteral;
-
 /// Base class for a literal value
 class Literal : public Castable<Literal, Node> {
  public:
   ~Literal() override;
 
-  /// @returns true if this is a bool literal
-  virtual bool IsBool() const;
-  /// @returns true if this is a float literal
-  virtual bool IsFloat() const;
-  /// @returns thre if this is an int literal (either sint or uint)
-  virtual bool IsInt() const;
-  /// @returns true if this is a signed int literal
-  virtual bool IsSint() const;
-  /// @returns true if this is a null literal
-  virtual bool IsNull() const;
-  /// @returns true if this is a unsigned int literal
-  virtual bool IsUint() const;
-
-  /// @returns the literal as a boolean literal
-  BoolLiteral* AsBool();
-  /// @returns the literal as a float literal
-  FloatLiteral* AsFloat();
-  /// @returns the literal as an int literal
-  IntLiteral* AsInt();
-  /// @returns the literal as a signed int literal
-  SintLiteral* AsSint();
-  /// @returns the literal as a null literal
-  NullLiteral* AsNull();
-  /// @returns the literal as a unsigned int literal
-  UintLiteral* AsUint();
-
   /// @returns the type of the literal
   ast::type::Type* type() const { return type_; }
 
diff --git a/src/ast/null_literal.cc b/src/ast/null_literal.cc
index 3c759ed..54b9344 100644
--- a/src/ast/null_literal.cc
+++ b/src/ast/null_literal.cc
@@ -21,10 +21,6 @@
 
 NullLiteral::~NullLiteral() = default;
 
-bool NullLiteral::IsNull() const {
-  return true;
-}
-
 std::string NullLiteral::to_str() const {
   return "null " + type()->type_name();
 }
diff --git a/src/ast/null_literal.h b/src/ast/null_literal.h
index 0c396c9..93b5f89 100644
--- a/src/ast/null_literal.h
+++ b/src/ast/null_literal.h
@@ -30,9 +30,6 @@
   explicit NullLiteral(ast::type::Type* type);
   ~NullLiteral() override;
 
-  /// @returns true if this is a null literal
-  bool IsNull() const override;
-
   /// @returns the name for this literal. This name is unique to this value.
   std::string name() const override;
 
diff --git a/src/ast/null_literal_test.cc b/src/ast/null_literal_test.cc
index 2ede9c3..d45b3e2 100644
--- a/src/ast/null_literal_test.cc
+++ b/src/ast/null_literal_test.cc
@@ -14,8 +14,12 @@
 
 #include "src/ast/null_literal.h"
 
+#include "src/ast/bool_literal.h"
+#include "src/ast/float_literal.h"
+#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/i32_type.h"
+#include "src/ast/uint_literal.h"
 
 namespace tint {
 namespace ast {
@@ -26,12 +30,13 @@
 TEST_F(NullLiteralTest, Is) {
   ast::type::I32Type i32;
   NullLiteral i{&i32};
-  EXPECT_FALSE(i.IsBool());
-  EXPECT_FALSE(i.IsSint());
-  EXPECT_FALSE(i.IsFloat());
-  EXPECT_FALSE(i.IsUint());
-  EXPECT_FALSE(i.IsInt());
-  EXPECT_TRUE(i.IsNull());
+  Literal* l = &i;
+  EXPECT_FALSE(l->Is<BoolLiteral>());
+  EXPECT_FALSE(l->Is<SintLiteral>());
+  EXPECT_FALSE(l->Is<FloatLiteral>());
+  EXPECT_FALSE(l->Is<UintLiteral>());
+  EXPECT_FALSE(l->Is<IntLiteral>());
+  EXPECT_TRUE(l->Is<NullLiteral>());
 }
 
 TEST_F(NullLiteralTest, ToStr) {
diff --git a/src/ast/sint_literal.cc b/src/ast/sint_literal.cc
index 6a5da13..ab44c21 100644
--- a/src/ast/sint_literal.cc
+++ b/src/ast/sint_literal.cc
@@ -22,10 +22,6 @@
 
 SintLiteral::~SintLiteral() = default;
 
-bool SintLiteral::IsSint() const {
-  return true;
-}
-
 std::string SintLiteral::to_str() const {
   return std::to_string(value_);
 }
diff --git a/src/ast/sint_literal.h b/src/ast/sint_literal.h
index 0e4db04..90e78c3 100644
--- a/src/ast/sint_literal.h
+++ b/src/ast/sint_literal.h
@@ -31,9 +31,6 @@
   SintLiteral(ast::type::Type* type, int32_t value);
   ~SintLiteral() override;
 
-  /// @returns true if this is a signed int literal
-  bool IsSint() const override;
-
   /// Updates the literals value
   /// @param val the value to set
   void set_value(int32_t val) { value_ = val; }
diff --git a/src/ast/sint_literal_test.cc b/src/ast/sint_literal_test.cc
index 9e42a5c..cc49ce6 100644
--- a/src/ast/sint_literal_test.cc
+++ b/src/ast/sint_literal_test.cc
@@ -14,9 +14,13 @@
 
 #include "src/ast/sint_literal.h"
 
+#include "src/ast/bool_literal.h"
+#include "src/ast/float_literal.h"
+#include "src/ast/null_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/i32_type.h"
 #include "src/ast/type/u32_type.h"
+#include "src/ast/uint_literal.h"
 
 namespace tint {
 namespace ast {
@@ -27,18 +31,19 @@
 TEST_F(SintLiteralTest, Value) {
   ast::type::I32Type i32;
   SintLiteral i{&i32, 47};
-  ASSERT_TRUE(i.IsSint());
+  ASSERT_TRUE(i.Is<SintLiteral>());
   EXPECT_EQ(i.value(), 47);
 }
 
 TEST_F(SintLiteralTest, Is) {
   ast::type::I32Type i32;
   SintLiteral i{&i32, 42};
-  EXPECT_FALSE(i.IsBool());
-  EXPECT_TRUE(i.IsSint());
-  EXPECT_FALSE(i.IsFloat());
-  EXPECT_FALSE(i.IsUint());
-  EXPECT_FALSE(i.IsNull());
+  Literal* l = &i;
+  EXPECT_FALSE(l->Is<BoolLiteral>());
+  EXPECT_TRUE(l->Is<SintLiteral>());
+  EXPECT_FALSE(l->Is<FloatLiteral>());
+  EXPECT_FALSE(l->Is<UintLiteral>());
+  EXPECT_FALSE(l->Is<NullLiteral>());
 }
 
 TEST_F(SintLiteralTest, ToStr) {
diff --git a/src/ast/uint_literal.cc b/src/ast/uint_literal.cc
index 4548a4f..201f17d 100644
--- a/src/ast/uint_literal.cc
+++ b/src/ast/uint_literal.cc
@@ -22,10 +22,6 @@
 
 UintLiteral::~UintLiteral() = default;
 
-bool UintLiteral::IsUint() const {
-  return true;
-}
-
 std::string UintLiteral::to_str() const {
   return std::to_string(value_);
 }
diff --git a/src/ast/uint_literal.h b/src/ast/uint_literal.h
index f15642a..56936ee 100644
--- a/src/ast/uint_literal.h
+++ b/src/ast/uint_literal.h
@@ -31,9 +31,6 @@
   UintLiteral(ast::type::Type* type, uint32_t value);
   ~UintLiteral() override;
 
-  /// @returns true if this is a uint literal
-  bool IsUint() const override;
-
   /// Updates the literals value
   /// @param val the value to set
   void set_value(uint32_t val) { value_ = val; }
diff --git a/src/ast/uint_literal_test.cc b/src/ast/uint_literal_test.cc
index df60554..b066bca 100644
--- a/src/ast/uint_literal_test.cc
+++ b/src/ast/uint_literal_test.cc
@@ -14,6 +14,10 @@
 
 #include "src/ast/uint_literal.h"
 
+#include "src/ast/bool_literal.h"
+#include "src/ast/float_literal.h"
+#include "src/ast/null_literal.h"
+#include "src/ast/sint_literal.h"
 #include "src/ast/test_helper.h"
 #include "src/ast/type/u32_type.h"
 
@@ -26,18 +30,19 @@
 TEST_F(UintLiteralTest, Value) {
   ast::type::U32Type u32;
   UintLiteral u{&u32, 47};
-  ASSERT_TRUE(u.IsUint());
+  ASSERT_TRUE(u.Is<UintLiteral>());
   EXPECT_EQ(u.value(), 47u);
 }
 
 TEST_F(UintLiteralTest, Is) {
   ast::type::U32Type u32;
   UintLiteral u{&u32, 42};
-  EXPECT_FALSE(u.IsBool());
-  EXPECT_FALSE(u.IsSint());
-  EXPECT_FALSE(u.IsFloat());
-  EXPECT_TRUE(u.IsUint());
-  EXPECT_FALSE(u.IsNull());
+  Literal* l = &u;
+  EXPECT_FALSE(l->Is<BoolLiteral>());
+  EXPECT_FALSE(l->Is<SintLiteral>());
+  EXPECT_FALSE(l->Is<FloatLiteral>());
+  EXPECT_TRUE(l->Is<UintLiteral>());
+  EXPECT_FALSE(l->Is<NullLiteral>());
 }
 
 TEST_F(UintLiteralTest, ToStr) {
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 9012f73..596420e 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -145,23 +145,23 @@
       continue;
     }
 
-    if (literal->IsBool()) {
-      result[constant_id] = Scalar(literal->AsBool()->IsTrue());
+    if (literal->Is<ast::BoolLiteral>()) {
+      result[constant_id] = Scalar(literal->As<ast::BoolLiteral>()->IsTrue());
       continue;
     }
 
-    if (literal->IsUint()) {
-      result[constant_id] = Scalar(literal->AsUint()->value());
+    if (literal->Is<ast::UintLiteral>()) {
+      result[constant_id] = Scalar(literal->As<ast::UintLiteral>()->value());
       continue;
     }
 
-    if (literal->IsSint()) {
-      result[constant_id] = Scalar(literal->AsSint()->value());
+    if (literal->Is<ast::SintLiteral>()) {
+      result[constant_id] = Scalar(literal->As<ast::SintLiteral>()->value());
       continue;
     }
 
-    if (literal->IsFloat()) {
-      result[constant_id] = Scalar(literal->AsFloat()->value());
+    if (literal->Is<ast::FloatLiteral>()) {
+      result[constant_id] = Scalar(literal->As<ast::FloatLiteral>()->value());
       continue;
     }
 
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 86eeeb8..60eada7 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1753,10 +1753,10 @@
       return Failure::kErrored;
     if (!cond.matched)
       break;
-    if (!cond->IsInt())
+    if (!cond->Is<ast::IntLiteral>())
       return add_error(t, "invalid case selector must be an integer value");
 
-    selectors.push_back(cond.value->AsInt());
+    selectors.push_back(cond.value->As<ast::IntLiteral>());
   }
 
   if (selectors.empty())
diff --git a/src/reader/wgsl/parser_impl_additive_expression_test.cc b/src/reader/wgsl/parser_impl_additive_expression_test.cc
index 7cdfbda..6776ad2 100644
--- a/src/reader/wgsl/parser_impl_additive_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_additive_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_Parses_Minus) {
@@ -67,8 +67,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_and_expression_test.cc b/src/reader/wgsl/parser_impl_and_expression_test.cc
index 5cc8d98..881d9ff 100644
--- a/src/reader/wgsl/parser_impl_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_and_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AndExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
index 541932d..69387ba 100644
--- a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -49,8 +49,8 @@
 
   auto* init = e->rhs()->As<ast::ScalarConstructorExpression>();
   ASSERT_NE(init->literal(), nullptr);
-  ASSERT_TRUE(init->literal()->IsSint());
-  EXPECT_EQ(init->literal()->AsSint()->value(), 123);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 123);
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_Parses_ToMember) {
@@ -69,8 +69,8 @@
   ASSERT_TRUE(e->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = e->rhs()->As<ast::ScalarConstructorExpression>();
   ASSERT_NE(init->literal(), nullptr);
-  ASSERT_TRUE(init->literal()->IsSint());
-  EXPECT_EQ(init->literal()->AsSint()->value(), 123);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 123);
 
   ASSERT_TRUE(e->lhs()->Is<ast::MemberAccessorExpression>());
   auto* mem = e->lhs()->As<ast::MemberAccessorExpression>();
@@ -86,8 +86,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
   init = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
   ASSERT_NE(init->literal(), nullptr);
-  ASSERT_TRUE(init->literal()->IsSint());
-  EXPECT_EQ(init->literal()->AsSint()->value(), 2);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 2);
 
   ASSERT_TRUE(ary->array()->Is<ast::MemberAccessorExpression>());
   mem = ary->array()->As<ast::MemberAccessorExpression>();
diff --git a/src/reader/wgsl/parser_impl_const_expr_test.cc b/src/reader/wgsl/parser_impl_const_expr_test.cc
index 4d13cf7..cb0c7ee 100644
--- a/src/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/reader/wgsl/parser_impl_const_expr_test.cc
@@ -44,14 +44,14 @@
   ASSERT_TRUE(v[0]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(v[0]->Is<ast::ScalarConstructorExpression>());
   auto* c = v[0]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(c->literal()->IsFloat());
-  EXPECT_FLOAT_EQ(c->literal()->AsFloat()->value(), 1.);
+  ASSERT_TRUE(c->literal()->Is<ast::FloatLiteral>());
+  EXPECT_FLOAT_EQ(c->literal()->As<ast::FloatLiteral>()->value(), 1.);
 
   ASSERT_TRUE(v[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(v[1]->Is<ast::ScalarConstructorExpression>());
   c = v[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(c->literal()->IsFloat());
-  EXPECT_FLOAT_EQ(c->literal()->AsFloat()->value(), 2.);
+  ASSERT_TRUE(c->literal()->Is<ast::FloatLiteral>());
+  EXPECT_FLOAT_EQ(c->literal()->As<ast::FloatLiteral>()->value(), 2.);
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_MissingRightParen) {
@@ -117,8 +117,8 @@
   ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(e->Is<ast::ScalarConstructorExpression>());
   auto* c = e->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(c->literal()->IsBool());
-  EXPECT_TRUE(c->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(c->literal()->Is<ast::BoolLiteral>());
+  EXPECT_TRUE(c->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ConstExpr_ConstLiteral_Invalid) {
diff --git a/src/reader/wgsl/parser_impl_const_literal_test.cc b/src/reader/wgsl/parser_impl_const_literal_test.cc
index fb99a27..51ee92a 100644
--- a/src/reader/wgsl/parser_impl_const_literal_test.cc
+++ b/src/reader/wgsl/parser_impl_const_literal_test.cc
@@ -32,8 +32,8 @@
   EXPECT_FALSE(c.errored);
   EXPECT_FALSE(p->has_error());
   ASSERT_NE(c.value, nullptr);
-  ASSERT_TRUE(c->IsSint());
-  EXPECT_EQ(c->AsSint()->value(), -234);
+  ASSERT_TRUE(c->Is<ast::SintLiteral>());
+  EXPECT_EQ(c->As<ast::SintLiteral>()->value(), -234);
 }
 
 TEST_F(ParserImplTest, ConstLiteral_Uint) {
@@ -43,8 +43,8 @@
   EXPECT_FALSE(c.errored);
   EXPECT_FALSE(p->has_error());
   ASSERT_NE(c.value, nullptr);
-  ASSERT_TRUE(c->IsUint());
-  EXPECT_EQ(c->AsUint()->value(), 234u);
+  ASSERT_TRUE(c->Is<ast::UintLiteral>());
+  EXPECT_EQ(c->As<ast::UintLiteral>()->value(), 234u);
 }
 
 TEST_F(ParserImplTest, ConstLiteral_Float) {
@@ -54,8 +54,8 @@
   EXPECT_FALSE(c.errored);
   EXPECT_FALSE(p->has_error());
   ASSERT_NE(c.value, nullptr);
-  ASSERT_TRUE(c->IsFloat());
-  EXPECT_FLOAT_EQ(c->AsFloat()->value(), 234e12f);
+  ASSERT_TRUE(c->Is<ast::FloatLiteral>());
+  EXPECT_FLOAT_EQ(c->As<ast::FloatLiteral>()->value(), 234e12f);
 }
 
 TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) {
@@ -73,8 +73,8 @@
   EXPECT_FALSE(c.errored);
   EXPECT_FALSE(p->has_error());
   ASSERT_NE(c.value, nullptr);
-  ASSERT_TRUE(c->IsBool());
-  EXPECT_TRUE(c->AsBool()->IsTrue());
+  ASSERT_TRUE(c->Is<ast::BoolLiteral>());
+  EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ConstLiteral_False) {
@@ -84,8 +84,8 @@
   EXPECT_FALSE(c.errored);
   EXPECT_FALSE(p->has_error());
   ASSERT_NE(c.value, nullptr);
-  ASSERT_TRUE(c->IsBool());
-  EXPECT_TRUE(c->AsBool()->IsFalse());
+  ASSERT_TRUE(c->Is<ast::BoolLiteral>());
+  EXPECT_TRUE(c->As<ast::BoolLiteral>()->IsFalse());
 }
 
 TEST_F(ParserImplTest, ConstLiteral_NoMatch) {
diff --git a/src/reader/wgsl/parser_impl_equality_expression_test.cc b/src/reader/wgsl/parser_impl_equality_expression_test.cc
index d73d1a5..cb99ff9 100644
--- a/src/reader/wgsl/parser_impl_equality_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_equality_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, EqualityExpression_Parses_NotEqual) {
@@ -67,8 +67,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, EqualityExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
index 63f7dd5..8fbcbb0 100644
--- a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ExclusiveOrExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
index 207fcd9..12b1ddb 100644
--- a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, InclusiveOrExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
index 7dd5ce3..e961e9e 100644
--- a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, LogicalAndExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
index c5bfaee..d4ee1b6 100644
--- a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, LogicalOrExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
index 41a3e8c..3f1595b 100644
--- a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_Parses_Divide) {
@@ -67,8 +67,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_Parses_Modulo) {
@@ -90,8 +90,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_postfix_expression_test.cc b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
index 7eb7ceb..e20955f 100644
--- a/src/reader/wgsl/parser_impl_postfix_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
@@ -47,8 +47,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
   auto* c = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(c->literal()->IsSint());
-  EXPECT_EQ(c->literal()->AsSint()->value(), 1);
+  ASSERT_TRUE(c->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(c->literal()->As<ast::SintLiteral>()->value(), 1);
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Array_ExpressionIndex) {
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index 10ebcc9..4753c63 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -60,26 +60,26 @@
   ASSERT_TRUE(val[0]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(val[0]->Is<ast::ScalarConstructorExpression>());
   auto* ident = val[0]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(ident->literal()->IsSint());
-  EXPECT_EQ(ident->literal()->AsSint()->value(), 1);
+  ASSERT_TRUE(ident->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(ident->literal()->As<ast::SintLiteral>()->value(), 1);
 
   ASSERT_TRUE(val[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(val[1]->Is<ast::ScalarConstructorExpression>());
   ident = val[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(ident->literal()->IsSint());
-  EXPECT_EQ(ident->literal()->AsSint()->value(), 2);
+  ASSERT_TRUE(ident->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(ident->literal()->As<ast::SintLiteral>()->value(), 2);
 
   ASSERT_TRUE(val[2]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(val[2]->Is<ast::ScalarConstructorExpression>());
   ident = val[2]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(ident->literal()->IsSint());
-  EXPECT_EQ(ident->literal()->AsSint()->value(), 3);
+  ASSERT_TRUE(ident->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(ident->literal()->As<ast::SintLiteral>()->value(), 3);
 
   ASSERT_TRUE(val[3]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(val[3]->Is<ast::ScalarConstructorExpression>());
   ident = val[3]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(ident->literal()->IsSint());
-  EXPECT_EQ(ident->literal()->AsSint()->value(), 4);
+  ASSERT_TRUE(ident->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(ident->literal()->As<ast::SintLiteral>()->value(), 4);
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_ZeroConstructor) {
@@ -146,8 +146,8 @@
   ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(e->Is<ast::ScalarConstructorExpression>());
   auto* init = e->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  EXPECT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  EXPECT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ParenExpr) {
diff --git a/src/reader/wgsl/parser_impl_relational_expression_test.cc b/src/reader/wgsl/parser_impl_relational_expression_test.cc
index ffa6840..3fe6196 100644
--- a/src/reader/wgsl/parser_impl_relational_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_relational_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_GreaterThan) {
@@ -67,8 +67,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_LessThanEqual) {
@@ -90,8 +90,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_GreaterThanEqual) {
@@ -113,8 +113,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_shift_expression_test.cc b/src/reader/wgsl/parser_impl_shift_expression_test.cc
index 17e7bad..b3f2319 100644
--- a/src/reader/wgsl/parser_impl_shift_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_shift_expression_test.cc
@@ -44,8 +44,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ShiftExpression_Parses_ShiftRight) {
@@ -67,8 +67,8 @@
   ASSERT_TRUE(rel->rhs()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(rel->rhs()->Is<ast::ScalarConstructorExpression>());
   auto* init = rel->rhs()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsBool());
-  ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
+  ASSERT_TRUE(init->literal()->Is<ast::BoolLiteral>());
+  ASSERT_TRUE(init->literal()->As<ast::BoolLiteral>()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ShiftExpression_InvalidLHS) {
diff --git a/src/reader/wgsl/parser_impl_unary_expression_test.cc b/src/reader/wgsl/parser_impl_unary_expression_test.cc
index c846667..e41e3ae 100644
--- a/src/reader/wgsl/parser_impl_unary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_unary_expression_test.cc
@@ -43,8 +43,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
   auto* init = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsSint());
-  ASSERT_EQ(init->literal()->AsSint()->value(), 2);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  ASSERT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 2);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Minus) {
@@ -63,8 +63,8 @@
   ASSERT_TRUE(u->expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* init = u->expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsSint());
-  EXPECT_EQ(init->literal()->AsSint()->value(), 1);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 1);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Minus_InvalidRHS) {
@@ -93,8 +93,8 @@
   ASSERT_TRUE(u->expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* init = u->expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(init->literal()->IsSint());
-  EXPECT_EQ(init->literal()->AsSint()->value(), 1);
+  ASSERT_TRUE(init->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(init->literal()->As<ast::SintLiteral>()->value(), 1);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Bang_InvalidRHS) {
diff --git a/src/transform/bound_array_accessors_transform.cc b/src/transform/bound_array_accessors_transform.cc
index a1ea02d..ab5c20d 100644
--- a/src/transform/bound_array_accessors_transform.cc
+++ b/src/transform/bound_array_accessors_transform.cc
@@ -215,20 +215,20 @@
   // Scalar constructor we can re-write the value to be within bounds.
   if (auto* c = expr->idx_expr()->As<ast::ScalarConstructorExpression>()) {
     auto* lit = c->literal();
-    if (lit->IsSint()) {
-      int32_t val = lit->AsSint()->value();
+    if (lit->Is<ast::SintLiteral>()) {
+      int32_t val = lit->As<ast::SintLiteral>()->value();
       if (val < 0) {
         val = 0;
       } else if (val >= int32_t(size)) {
         val = int32_t(size) - 1;
       }
-      lit->AsSint()->set_value(val);
-    } else if (lit->IsUint()) {
-      uint32_t val = lit->AsUint()->value();
+      lit->As<ast::SintLiteral>()->set_value(val);
+    } else if (lit->Is<ast::UintLiteral>()) {
+      uint32_t val = lit->As<ast::UintLiteral>()->value();
       if (val >= size - 1) {
         val = size - 1;
       }
-      lit->AsUint()->set_value(val);
+      lit->As<ast::UintLiteral>()->set_value(val);
     } else {
       error_ = "unknown scalar constructor type for accessor";
       return false;
diff --git a/src/transform/bound_array_accessors_transform_test.cc b/src/transform/bound_array_accessors_transform_test.cc
index b0e6543..7805d8c 100644
--- a/src/transform/bound_array_accessors_transform_test.cc
+++ b/src/transform/bound_array_accessors_transform_test.cc
@@ -148,8 +148,8 @@
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   auto* scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -229,14 +229,14 @@
   ASSERT_TRUE(sub_idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(sub_idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   auto* scalar = sub_idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 4u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 4u);
 
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -274,8 +274,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -336,8 +336,8 @@
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   auto* scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -375,8 +375,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 0);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 0);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -414,8 +414,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -453,8 +453,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -514,8 +514,8 @@
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   auto* scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -553,8 +553,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 0);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 0);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -592,8 +592,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -637,8 +637,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -647,8 +647,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -715,8 +715,8 @@
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   auto* scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -725,8 +725,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -781,8 +781,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::CallExpression>());
   auto* idx = ptr->idx_expr()->As<ast::CallExpression>();
@@ -801,8 +801,8 @@
   ASSERT_TRUE(idx->params()[1]->Is<ast::ConstructorExpression>());
   ASSERT_TRUE(idx->params()[1]->Is<ast::ScalarConstructorExpression>());
   scalar = idx->params()[1]->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -848,8 +848,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 0);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 0);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -858,8 +858,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 1);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 1);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -902,8 +902,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 2);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 2);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -912,8 +912,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsSint());
-  EXPECT_EQ(scalar->literal()->AsSint()->value(), 0);
+  ASSERT_TRUE(scalar->literal()->Is<ast::SintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::SintLiteral>()->value(), 0);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::I32Type>());
@@ -957,8 +957,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -967,8 +967,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -1012,8 +1012,8 @@
   ASSERT_TRUE(ary->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   auto* scalar = ary->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 2u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 2u);
 
   ASSERT_NE(ary->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ary->idx_expr()->result_type()->Is<ast::type::U32Type>());
@@ -1022,8 +1022,8 @@
   ASSERT_TRUE(ptr->idx_expr()->Is<ast::ScalarConstructorExpression>());
 
   scalar = ptr->idx_expr()->As<ast::ScalarConstructorExpression>();
-  ASSERT_TRUE(scalar->literal()->IsUint());
-  EXPECT_EQ(scalar->literal()->AsUint()->value(), 1u);
+  ASSERT_TRUE(scalar->literal()->Is<ast::UintLiteral>());
+  EXPECT_EQ(scalar->literal()->As<ast::UintLiteral>()->value(), 1u);
 
   ASSERT_NE(ptr->idx_expr()->result_type(), nullptr);
   ASSERT_TRUE(ptr->idx_expr()->result_type()->Is<ast::type::U32Type>());
diff --git a/src/validator/validator_impl.cc b/src/validator/validator_impl.cc
index c00c998..510bcd3 100644
--- a/src/validator/validator_impl.cc
+++ b/src/validator/validator_impl.cc
@@ -344,13 +344,14 @@
         return false;
       }
 
-      auto v = static_cast<int32_t>(selector->type()->Is<ast::type::U32Type>()
-                                        ? selector->AsUint()->value()
-                                        : selector->AsSint()->value());
+      auto v =
+          static_cast<int32_t>(selector->type()->Is<ast::type::U32Type>()
+                                   ? selector->As<ast::UintLiteral>()->value()
+                                   : selector->As<ast::SintLiteral>()->value());
       if (selector_set.count(v)) {
         auto v_str = selector->type()->Is<ast::type::U32Type>()
-                         ? selector->AsUint()->to_str()
-                         : selector->AsSint()->to_str();
+                         ? selector->As<ast::UintLiteral>()->to_str()
+                         : selector->As<ast::SintLiteral>()->to_str();
         add_error(case_stmt->source(), "v-0027",
                   "a literal value must not appear more than once in "
                   "the case selectors for a switch statement: '" +
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index a84af8c..3bbd20b 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1538,14 +1538,14 @@
 }
 
 bool GeneratorImpl::EmitLiteral(std::ostream& out, ast::Literal* lit) {
-  if (lit->IsBool()) {
-    out << (lit->AsBool()->IsTrue() ? "true" : "false");
-  } else if (lit->IsFloat()) {
-    out << FloatToString(lit->AsFloat()->value()) << "f";
-  } else if (lit->IsSint()) {
-    out << lit->AsSint()->value();
-  } else if (lit->IsUint()) {
-    out << lit->AsUint()->value() << "u";
+  if (lit->Is<ast::BoolLiteral>()) {
+    out << (lit->As<ast::BoolLiteral>()->IsTrue() ? "true" : "false");
+  } else if (lit->Is<ast::FloatLiteral>()) {
+    out << FloatToString(lit->As<ast::FloatLiteral>()->value()) << "f";
+  } else if (lit->Is<ast::SintLiteral>()) {
+    out << lit->As<ast::SintLiteral>()->value();
+  } else if (lit->Is<ast::UintLiteral>()) {
+    out << lit->As<ast::UintLiteral>()->value() << "u";
   } else {
     error_ = "unknown literal type";
     return false;
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index d4826e9..4bf9110 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -966,14 +966,14 @@
 }
 
 bool GeneratorImpl::EmitLiteral(ast::Literal* lit) {
-  if (lit->IsBool()) {
-    out_ << (lit->AsBool()->IsTrue() ? "true" : "false");
-  } else if (lit->IsFloat()) {
-    out_ << FloatToString(lit->AsFloat()->value()) << "f";
-  } else if (lit->IsSint()) {
-    out_ << lit->AsSint()->value();
-  } else if (lit->IsUint()) {
-    out_ << lit->AsUint()->value() << "u";
+  if (lit->Is<ast::BoolLiteral>()) {
+    out_ << (lit->As<ast::BoolLiteral>()->IsTrue() ? "true" : "false");
+  } else if (lit->Is<ast::FloatLiteral>()) {
+    out_ << FloatToString(lit->As<ast::FloatLiteral>()->value()) << "f";
+  } else if (lit->Is<ast::SintLiteral>()) {
+    out_ << lit->As<ast::SintLiteral>()->value();
+  } else if (lit->Is<ast::UintLiteral>()) {
+    out_ << lit->As<ast::UintLiteral>()->value() << "u";
   } else {
     error_ = "unknown literal type";
     return false;
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 042bea5..08f9eab 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -1490,8 +1490,8 @@
          Operand::Int(var->As<ast::DecoratedVariable>()->constant_id())});
   }
 
-  if (lit->IsBool()) {
-    if (lit->AsBool()->IsTrue()) {
+  if (lit->Is<ast::BoolLiteral>()) {
+    if (lit->As<ast::BoolLiteral>()->IsTrue()) {
       push_type(is_spec_constant ? spv::Op::OpSpecConstantTrue
                                  : spv::Op::OpConstantTrue,
                 {Operand::Int(type_id), result});
@@ -1500,19 +1500,19 @@
                                  : spv::Op::OpConstantFalse,
                 {Operand::Int(type_id), result});
     }
-  } else if (lit->IsSint()) {
-    push_type(
-        is_spec_constant ? spv::Op::OpSpecConstant : spv::Op::OpConstant,
-        {Operand::Int(type_id), result, Operand::Int(lit->AsSint()->value())});
-  } else if (lit->IsUint()) {
-    push_type(
-        is_spec_constant ? spv::Op::OpSpecConstant : spv::Op::OpConstant,
-        {Operand::Int(type_id), result, Operand::Int(lit->AsUint()->value())});
-  } else if (lit->IsFloat()) {
+  } else if (lit->Is<ast::SintLiteral>()) {
     push_type(is_spec_constant ? spv::Op::OpSpecConstant : spv::Op::OpConstant,
               {Operand::Int(type_id), result,
-               Operand::Float(lit->AsFloat()->value())});
-  } else if (lit->IsNull()) {
+               Operand::Int(lit->As<ast::SintLiteral>()->value())});
+  } else if (lit->Is<ast::UintLiteral>()) {
+    push_type(is_spec_constant ? spv::Op::OpSpecConstant : spv::Op::OpConstant,
+              {Operand::Int(type_id), result,
+               Operand::Int(lit->As<ast::UintLiteral>()->value())});
+  } else if (lit->Is<ast::FloatLiteral>()) {
+    push_type(is_spec_constant ? spv::Op::OpSpecConstant : spv::Op::OpConstant,
+              {Operand::Int(type_id), result,
+               Operand::Float(lit->As<ast::FloatLiteral>()->value())});
+  } else if (lit->Is<ast::NullLiteral>()) {
     push_type(spv::Op::OpConstantNull, {Operand::Int(type_id), result});
   } else {
     error_ = "unknown literal type";
@@ -2247,12 +2247,12 @@
 
     case_ids.push_back(block_id);
     for (auto* selector : item->selectors()) {
-      if (!selector->IsSint()) {
+      if (!selector->Is<ast::SintLiteral>()) {
         error_ = "expected integer literal for switch case label";
         return false;
       }
 
-      params.push_back(Operand::Int(selector->AsSint()->value()));
+      params.push_back(Operand::Int(selector->As<ast::SintLiteral>()->value()));
       params.push_back(Operand::Int(block_id));
     }
   }
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 88dfb21..d038609 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -321,14 +321,14 @@
 }
 
 bool GeneratorImpl::EmitLiteral(ast::Literal* lit) {
-  if (lit->IsBool()) {
-    out_ << (lit->AsBool()->IsTrue() ? "true" : "false");
-  } else if (lit->IsFloat()) {
-    out_ << FloatToString(lit->AsFloat()->value());
-  } else if (lit->IsSint()) {
-    out_ << lit->AsSint()->value();
-  } else if (lit->IsUint()) {
-    out_ << lit->AsUint()->value() << "u";
+  if (lit->Is<ast::BoolLiteral>()) {
+    out_ << (lit->As<ast::BoolLiteral>()->IsTrue() ? "true" : "false");
+  } else if (lit->Is<ast::FloatLiteral>()) {
+    out_ << FloatToString(lit->As<ast::FloatLiteral>()->value());
+  } else if (lit->Is<ast::SintLiteral>()) {
+    out_ << lit->As<ast::SintLiteral>()->value();
+  } else if (lit->Is<ast::UintLiteral>()) {
+    out_ << lit->As<ast::UintLiteral>()->value() << "u";
   } else {
     error_ = "unknown literal type";
     return false;
