diff --git a/ptera-th.cabal b/ptera-th.cabal
--- a/ptera-th.cabal
+++ b/ptera-th.cabal
@@ -2,7 +2,7 @@
 build-type:          Custom
 
 name:                ptera-th
-version:             0.6.0.0
+version:             0.6.1.0
 license:             Apache-2.0 OR MPL-2.0
 license-file:        LICENSE
 copyright:           (c) 2021 Mizunashi Mana
diff --git a/src/Language/Parser/Ptera/TH/ParserLib.hs b/src/Language/Parser/Ptera/TH/ParserLib.hs
--- a/src/Language/Parser/Ptera/TH/ParserLib.hs
+++ b/src/Language/Parser/Ptera/TH/ParserLib.hs
@@ -2,6 +2,7 @@
     module Language.Parser.Ptera.Runner.Parser,
     module Data.Proxy,
     Parser,
+    PteraTHArray,
     pteraTHTokenToTerminal,
     pteraTHArrayIndex,
     pteraTHArrayFromList,
@@ -36,13 +37,15 @@
 
 type Parser = Runner.T
 
+type PteraTHArray = Array.Array
+
 pteraTHTokenToTerminal :: GrammarToken tokens elem => Proxy tokens -> elem -> Int
 pteraTHTokenToTerminal p t = HEnum.unsafeHEnum do tokenToTerminal p t
 
-pteraTHArrayIndex :: Array.Array Int e -> Int -> e
+pteraTHArrayIndex :: PteraTHArray Int e -> Int -> e
 pteraTHArrayIndex arr i = arr Array.! i
 
-pteraTHArrayFromList :: Int -> [e] -> Array.Array Int e
+pteraTHArrayFromList :: Int -> [e] -> PteraTHArray Int e
 pteraTHArrayFromList b l = Array.listArray (0, b) l
 
 pteraTHLookupTable8 :: Int -> Prim.Addr# -> Int -> Int -> Int
diff --git a/src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs b/src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs
--- a/src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs
+++ b/src/Language/Parser/Ptera/TH/Pipeline/SRB2ParserDec.hs
@@ -109,6 +109,7 @@
                     else Nothing
             |]
             <*> [d|
+                table :: PteraTHArray Int (Maybe Int)
                 table = pteraTHArrayFromList $(TH.lift ub) $(TH.ListE <$> qes)
             |]
     where
@@ -121,7 +122,7 @@
                 Nothing ->
                     [e|Nothing|]
                 Just (SRB.StateNum s) ->
-                    [e|Just $(TH.lift s)|]
+                    [e|Just $(TH.lift s) :: Maybe Int|]
             [0..ub]
 
 outputParserTransFn :: TH.Name
@@ -302,12 +303,12 @@
     -> TH.Q TH.Dec
 outputParserAltKindFn parserAltKindFnName alts = TH.ValD
     do TH.VarP parserAltKindFnName
-    <$> fmap TH.NormalB [e|
-        let arr = pteraTHArrayFromList $(TH.lift do length alts - 1)
-                $(TH.ListE <$> traverse altKindExp do toList alts)
-        in \i -> pteraTHArrayIndex arr i
+    <$> fmap TH.NormalB [e|\i -> pteraTHArrayIndex table i|]
+    <*> [d|
+        table :: PteraTHArray Int AltKind
+        table = pteraTHArrayFromList $(TH.lift do length alts - 1)
+            $(TH.ListE <$> traverse altKindExp do toList alts)
     |]
-    <*> pure []
     where
         altKindExp alt = case LAPEG.altKind alt of
             AltSeq -> [e|AltSeq|]
@@ -320,19 +321,19 @@
     -> TH.Q TH.Dec
 outputParserStateHelpFn fnName states = TH.ValD
     do TH.VarP fnName
-    <$> fmap TH.NormalB [e|
-        let arr = pteraTHArrayFromList $(TH.lift do length states - 1)
-                $(TH.ListE <$> traverse stateHelpExp do toList states)
-        in \i -> pteraTHArrayIndex arr i
+    <$> fmap TH.NormalB [e|\i -> pteraTHArrayIndex table i|]
+    <*> [d|
+        table :: PteraTHArray Int [(Int, Int)]
+        table = pteraTHArrayFromList $(TH.lift do length states - 1)
+            $(TH.ListE <$> traverse stateHelpExp do toList states)
     |]
-    <*> pure []
     where
         stateHelpExp st =
             let altItems = SRB.stateAltItems st
             in TH.ListE <$> forM altItems \altItem -> do
                 let altNum :: Int = coerce do SRB.altItemAltNum altItem
                     pos :: Int = coerce do SRB.altItemCurPos altItem
-                [e|($(TH.lift altNum), $(TH.lift pos))|]
+                [e|($(TH.lift altNum) :: Int, $(TH.lift pos) :: Int)|]
 
 outputParserAltHelpFn
     :: TH.Name
@@ -341,12 +342,12 @@
     -> TH.Q TH.Dec
 outputParserAltHelpFn parserAltHelpFnName alts vars = TH.ValD
     do TH.VarP parserAltHelpFnName
-    <$> fmap TH.NormalB [e|
-        let arr = pteraTHArrayFromList $(TH.lift do length alts - 1)
-                $(TH.ListE <$> traverse altHelpExp do toList alts)
-        in \i -> pteraTHArrayIndex arr i
+    <$> fmap TH.NormalB [e|\i -> pteraTHArrayIndex table i|]
+    <*> [d|
+        table :: PteraTHArray Int (StringLit, Maybe ())
+        table = pteraTHArrayFromList $(TH.lift do length alts - 1)
+            $(TH.ListE <$> traverse altHelpExp do toList alts)
     |]
-    <*> pure []
     where
         altHelpExp alt =
             let v = AlignableArray.forceIndex vars do LAPEG.altVar alt
