diff --git a/ptera.cabal b/ptera.cabal
--- a/ptera.cabal
+++ b/ptera.cabal
@@ -2,7 +2,7 @@
 build-type:          Custom
 
 name:                ptera
-version:             0.2.0.0
+version:             0.3.0.0
 license:             Apache-2.0 OR MPL-2.0
 license-file:        LICENSE
 copyright:           (c) 2021 Mizunashi Mana
diff --git a/src/Language/Parser/Ptera/Syntax.hs b/src/Language/Parser/Ptera/Syntax.hs
--- a/src/Language/Parser/Ptera/Syntax.hs
+++ b/src/Language/Parser/Ptera/Syntax.hs
@@ -1,7 +1,6 @@
 module Language.Parser.Ptera.Syntax (
     T,
 
-    HasField (..),
     SafeGrammar.HasRuleExprField (..),
     SafeGrammar.TokensTag,
     SafeGrammar.RulesTag,
diff --git a/src/Language/Parser/Ptera/Syntax/SafeGrammar.hs b/src/Language/Parser/Ptera/Syntax/SafeGrammar.hs
--- a/src/Language/Parser/Ptera/Syntax/SafeGrammar.hs
+++ b/src/Language/Parser/Ptera/Syntax/SafeGrammar.hs
@@ -68,12 +68,11 @@
 class GrammarToken tokens elem where
     tokenToTerminal :: Proxy tokens -> elem -> HEnum.T (TokensTag tokens)
 
-class
-    ( KnownSymbol v
-    , HasField v rules ((RuleExprType rules) (RuleExprReturnType rules v))
-    ) => HasRuleExprField rules v where
+class KnownSymbol v => HasRuleExprField rules v where
     type RuleExprReturnType rules v :: Type
 
+    getExprField :: rules -> proxy v -> RuleExprType rules (RuleExprReturnType rules v)
+
     nonTerminalName :: rules -> proxy v -> String
     nonTerminalName _ p = symbolVal p
 
@@ -120,7 +119,7 @@
             let vn = getNewV do symbolVal m
             let d = nonTerminalName ruleDefs m
             SyntaxGrammar.ruleT vn d do
-                fixRuleExpr do getField @v ruleDefs
+                fixRuleExpr do getExprField ruleDefs m
 
         fixRuleExpr :: RuleExpr action rules tokens elem a
             -> SyntaxGrammar.RuleExpr NonTerminal Terminal elem (Maybe ()) action
