diff --git a/Language/Symantic/Grammar/ContextFree.hs b/Language/Symantic/Grammar/ContextFree.hs
--- a/Language/Symantic/Grammar/ContextFree.hs
+++ b/Language/Symantic/Grammar/ContextFree.hs
@@ -32,15 +32,15 @@
 deriving instance Gram_RuleEBNF g => Gram_RuleEBNF (CF g)
 instance Gram_CF EBNF where
 	CF (EBNF f) <& Reg (EBNF g) =
-		CF $ EBNF $ \bo po -> parenInfix po op $
+		CF $ EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		f bo (op, SideL) <> " & " <> g bo (op, SideR)
 		where op = infixB SideL 4
 	Reg (EBNF f) &> CF (EBNF g) =
-		CF $ EBNF $ \bo po -> parenInfix po op $
+		CF $ EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		f bo (op, SideL) <> " & " <> g bo (op, SideR)
 		where op = infixB SideL 4
 	CF (EBNF f) `minus` Reg (EBNF g) =
-		CF $ EBNF $ \bo po -> parenInfix po op $
+		CF $ EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		f bo (op, SideL) <> " - " <> g bo (op, SideR)
 		where op = infixL 6
 
diff --git a/Language/Symantic/Grammar/EBNF.hs b/Language/Symantic/Grammar/EBNF.hs
--- a/Language/Symantic/Grammar/EBNF.hs
+++ b/Language/Symantic/Grammar/EBNF.hs
@@ -56,7 +56,7 @@
 
 -- | 'EBNF' which adds an argument to be applied.
 ebnf_arg :: EBNF a -> EBNF b -> EBNF ()
-ebnf_arg (EBNF a) (EBNF b) = EBNF $ \bo po -> parenInfix po op $
+ebnf_arg (EBNF a) (EBNF b) = EBNF $ \bo po -> pairIfNeeded pairParen po op $
 	a bo (op, SideL) <> " " <> b bo (op, SideR)
 	where op = infixL 11
 infixl 5 `ebnf_arg`
@@ -111,7 +111,7 @@
 	fmap _f (EBNF x) = EBNF x
 instance Applicative EBNF where
 	pure _ = ebnf_const $ "\"\""
-	EBNF f <*> EBNF x = EBNF $ \bo po -> parenInfix po op $
+	EBNF f <*> EBNF x = EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		f bo (op, SideL) <> ", " <> x bo (op, SideR)
 		where op = infixB SideL 10
 instance Gram_Rule EBNF where
diff --git a/Language/Symantic/Grammar/Fixity.hs b/Language/Symantic/Grammar/Fixity.hs
--- a/Language/Symantic/Grammar/Fixity.hs
+++ b/Language/Symantic/Grammar/Fixity.hs
@@ -1,14 +1,14 @@
 module Language.Symantic.Grammar.Fixity where
 
-import Data.Bool as Bool
+import Data.Bool
 import Data.Eq (Eq(..))
 import Data.Function ((.))
 import Data.Int (Int)
 import Data.Maybe (Maybe(..))
 import Data.Ord (Ord(..))
 import Data.Semigroup
-import Data.String (IsString(..))
-import Text.Show (Show)
+import Data.String (String, IsString(..))
+import Text.Show (Show(..))
 
 -- * Type 'Fixity'
 data Fixity
@@ -18,15 +18,15 @@
 
 -- ** Type 'Unifix'
 data Unifix
- =   Prefix  { unifix_prece :: Precedence }
- |   Postfix { unifix_prece :: Precedence }
+ =   Prefix  { unifix_precedence :: Precedence }
+ |   Postfix { unifix_precedence :: Precedence }
  deriving (Eq, Show)
 
 -- ** Type 'Infix'
 data Infix
  =   Infix
- {   infix_assoc :: Maybe Associativity
- ,   infix_prece :: Precedence
+ {   infix_associativity :: Maybe Associativity
+ ,   infix_precedence    :: Precedence
  } deriving (Eq, Show)
 
 infixL :: Precedence -> Infix
@@ -50,29 +50,30 @@
 -- | Given 'Precedence' and 'Associativity' of its parent operator,
 -- and the operand 'Side' it is in,
 -- return whether an 'Infix' operator
--- needs to be enclosed by parenthesis.
-needsParenInfix :: (Infix, Side) -> Infix -> Bool
-needsParenInfix (po, lr) op =
-	infix_prece op < infix_prece po
-	|| infix_prece op == infix_prece po
-	&& Bool.not associate
+-- needs to be enclosed by a 'Pair'.
+isPairNeeded :: (Infix, Side) -> Infix -> Bool
+isPairNeeded (po, lr) op =
+	infix_precedence op < infix_precedence po
+	|| infix_precedence op == infix_precedence po
+	&& not associate
 	where
 	associate =
-		case (lr, infix_assoc po) of
+		case (lr, infix_associativity po) of
 		 (_, Just AssocB{})   -> True
 		 (SideL, Just AssocL) -> True
 		 (SideR, Just AssocR) -> True
 		 _ -> False
 
--- | If 'needsParenInfix' is 'True',
--- enclose the given 'IsString' by parenthesis,
+-- | If 'isPairNeeded' is 'True',
+-- enclose the given 'IsString' by given 'Pair',
 -- otherwise returns the same 'IsString'.
-parenInfix
- :: (Semigroup s, IsString s)
- => (Infix, Side) -> Infix -> s -> s
-parenInfix po op s =
-	if needsParenInfix po op
-	then fromString "(" <> s <> fromString ")"
+pairIfNeeded ::
+ Semigroup s => IsString s =>
+ Pair -> (Infix, Side) -> Infix ->
+ s -> s
+pairIfNeeded (o,c) po op s =
+	if isPairNeeded po op
+	then fromString o <> s <> fromString c
 	else s
 
 -- * Type 'Precedence'
@@ -85,9 +86,9 @@
 	precedence (Fixity1 uni) = precedence uni
 	precedence (Fixity2 inf) = precedence inf
 instance PrecedenceOf Unifix where
-	precedence = unifix_prece
+	precedence = unifix_precedence
 instance PrecedenceOf Infix where
-	precedence = infix_prece
+	precedence = infix_precedence
 
 -- * Type 'Associativity'
 data Associativity
@@ -101,3 +102,9 @@
  =   SideL -- ^ Left
  |   SideR -- ^ Right
  deriving (Eq, Show)
+
+-- ** Type 'Pair'
+type Pair = (String, String)
+pairParen, pairBrace :: Pair
+pairParen = ("(",")")
+pairBrace = ("{","}")
diff --git a/Language/Symantic/Grammar/Operators.hs b/Language/Symantic/Grammar/Operators.hs
--- a/Language/Symantic/Grammar/Operators.hs
+++ b/Language/Symantic/Grammar/Operators.hs
@@ -130,7 +130,7 @@
 		 EQ -> OpTree1 uni_a op_a nod_b
 		 LT -> OpTree1 uni_b op_b $ insertUnifix a nod
 	 OpTree2 inf_b op_b l r ->
-		case infix_prece inf_b `compare` prece_a of
+		case infix_precedence inf_b `compare` prece_a of
 		 GT -> OpTree1 uni_a op_a nod_b
 		 EQ -> OpTree1 uni_a op_a nod_b
 		 LT -> OpTree2 inf_b op_b (insertUnifix a l) r
@@ -144,7 +144,7 @@
 		 LT -> OpTree1 uni_b op_b $ insertUnifix a nod
 	 OpTree1 Postfix{} _op_b _nod -> OpTree1 uni_a op_a nod_b
 	 OpTree2 inf_b op_b l r ->
-		case infix_prece inf_b `compare` prece_a of
+		case infix_precedence inf_b `compare` prece_a of
 		 GT -> OpTree1 uni_a op_a nod_b
 		 EQ -> OpTree1 uni_a op_a nod_b
 		 LT -> OpTree2 inf_b op_b l (insertUnifix a r)
@@ -160,14 +160,14 @@
 	case nod_b of
 	 OpTree0{} -> Right $ OpTree2 inf_a op_a nod_a nod_b
 	 OpTree1 uni_b op_b nod ->
-		case unifix_prece uni_b `compare` infix_prece inf_a of
+		case unifix_precedence uni_b `compare` infix_precedence inf_a of
 		 EQ -> Right $ OpTree2 inf_a op_a nod_a nod_b
 		 GT -> Right $ OpTree2 inf_a op_a nod_a nod_b
 		 LT -> do
 			n <- insertInfix nod_a in_ (Right nod)
 			Right $ OpTree1 uni_b op_b n
 	 OpTree2 inf_b op_b l r ->
-		case infix_prece inf_b `compare` infix_prece inf_a of
+		case infix_precedence inf_b `compare` infix_precedence inf_a of
 		 GT -> Right $ OpTree2 inf_a op_a nod_a nod_b
 		 LT -> do
 			n <- insertInfix nod_a in_ (Right l)
@@ -177,7 +177,7 @@
 				 AssocL -> SideL
 				 AssocR -> SideR
 				 AssocB lr -> lr in
-			case (ass <$> infix_assoc inf_b, ass <$> infix_assoc inf_a) of
+			case (ass <$> infix_associativity inf_b, ass <$> infix_associativity inf_a) of
 			 (Just SideL, Just SideL) -> do
 				n <- insertInfix nod_a in_ (Right l)
 				Right $ OpTree2 inf_b op_b n r
diff --git a/Language/Symantic/Grammar/Regular.hs b/Language/Symantic/Grammar/Regular.hs
--- a/Language/Symantic/Grammar/Regular.hs
+++ b/Language/Symantic/Grammar/Regular.hs
@@ -52,13 +52,13 @@
 instance Gram_Alt EBNF where
 	empty = ebnf_const $ "empty"
 	EBNF g <+> EBNF q =
-		EBNF $ \bo po -> parenInfix po op $
+		EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		g bo (op, SideL) <> " | " <> q bo (op, SideR)
 		where op = infixB SideL 2
 	choice [] = empty
 	choice [g] = g
 	choice l@(_:_) =
-		EBNF $ \bo po -> parenInfix po op $
+		EBNF $ \bo po -> pairIfNeeded pairParen po op $
 		Text.intercalate " | " $
 		(unEBNF <$> l) <*> pure bo <*> pure (op, SideL)
 		where op = infixB SideL 2
diff --git a/Language/Symantic/Grammar/Source.hs b/Language/Symantic/Grammar/Source.hs
--- a/Language/Symantic/Grammar/Source.hs
+++ b/Language/Symantic/Grammar/Source.hs
@@ -23,13 +23,13 @@
 -- ** Type family 'SourceOf'
 type family SourceOf a
 
--- ** Type 'Sourced'
-class Source (SourceOf a) => Sourced a where
+-- ** Type 'Sourceable'
+class Source (SourceOf a) => Sourceable a where
 	sourceOf  :: a -> SourceOf a
 	setSource :: a -> SourceOf a -> a
 infixl 5 `setSource`
 
-withSource :: SourceInj src (SourceOf a) => Sourced a => a -> src -> a
+withSource :: SourceInj src (SourceOf a) => Sourceable a => a -> src -> a
 withSource a src = a `setSource` sourceInj src
 
 -- ** Type 'Source_Input'
@@ -43,10 +43,10 @@
  ,   spanEnd   :: !src
  } deriving (Eq, Ord, Show, Typeable)
 
--- ** Type 'At'
+-- ** Type 'Sourced'
 -- | Attach a 'Source' to something.
-data At src a
- =   At
- {   at   :: !src
- ,   unAt :: !a
+data Sourced src a
+ =   Sourced
+ {   atSource  :: !src
+ ,   unSourced :: !a
  } deriving (Eq, Functor, Ord, Show, Typeable)
diff --git a/Language/Symantic/Grammar/Terminal.hs b/Language/Symantic/Grammar/Terminal.hs
--- a/Language/Symantic/Grammar/Terminal.hs
+++ b/Language/Symantic/Grammar/Terminal.hs
@@ -44,7 +44,7 @@
 instance Gram_Char EBNF where
 	any  = ebnf_const "_"
 	Terminal (EBNF f) `but` Terminal (EBNF g) =
-		Terminal $ EBNF $ \bo po -> parenInfix po op $
+		Terminal $ EBNF $ \bo po -> pairIfNeeded pairParen po op $
 			f bo (op, SideL) <> " - " <> g bo (op, SideR)
 		where op = infixL 6
 	eoi   = ebnf_const "eoi"
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,3 +1,3 @@
-resolver: lts-12.8
+resolver: lts-13.19
 packages:
 - '.'
diff --git a/symantic-grammar.cabal b/symantic-grammar.cabal
--- a/symantic-grammar.cabal
+++ b/symantic-grammar.cabal
@@ -2,7 +2,7 @@
 -- PVP:  +-+------- breaking API changes
 --       | | +----- non-breaking API additions
 --       | | | +--- code changes with no API change
-version: 0.3.1.20180831
+version: 0.3.3.20190614
 category: Language
 synopsis: Library for symantic grammars.
 description: This library defines an embedded DSL for regular or context-free grammars,
@@ -20,8 +20,8 @@
 -- homepage:
 
 build-type: Simple
-cabal-version: >= 1.24
-tested-with: GHC==8.4.3
+cabal-version: 1.24
+tested-with: GHC==8.4.4
 extra-source-files:
   stack.yaml
 extra-tmp-files:
@@ -89,7 +89,7 @@
   build-depends:
       symantic-grammar
     , base         >= 4.6 && < 5
-    , megaparsec   >= 6.3
+    , megaparsec   >= 7.0
     , tasty        >= 0.11
     , tasty-hunit  >= 0.9
     , text         >= 1.2
diff --git a/test/HUnit.hs b/test/HUnit.hs
--- a/test/HUnit.hs
+++ b/test/HUnit.hs
@@ -24,7 +24,7 @@
 instance ParsecC e s => Gram_Rule (P.ParsecT e s m) where
 	rule = P.label . Text.unpack
 instance ParsecC e s => Gram_Char (P.ParsecT e s m) where
-	any          = P.anyChar
+	any          = P.anySingle
 	eoi          = P.eof
 	char         = P.char
 	unicat cat   = P.satisfy $ (`elem` cats) . Char.generalCategory
