diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
-## 0.1.0.0 -- 2021-01-XX
+## 0.2.0.0 -- 2021-01-13
+
+* Add `Semigroup` / `Monoid` instances for `EnumSet` / `SymEnumSet`.
+
+## 0.1.0.0 -- 2021-01-07
 
 * First version. Released on an unsuspecting world.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,5 @@
+# Tlex Core Library
+
+[![Hackage](https://img.shields.io/hackage/v/tlex-core.svg)](https://hackage.haskell.org/package/tlex-core)
+
 See https://hackage.haskell.org/package/tlex
diff --git a/src/Language/Lexer/Tlex/Data/EnumSet.hs b/src/Language/Lexer/Tlex/Data/EnumSet.hs
--- a/src/Language/Lexer/Tlex/Data/EnumSet.hs
+++ b/src/Language/Lexer/Tlex/Data/EnumSet.hs
@@ -24,6 +24,12 @@
 instance Hashable.Hashable (EnumSet a) where
     hashWithSalt s (EnumSet x) = Hashable.hashWithSalt s do IntSet.toAscList x
 
+instance Enum a => Semigroup (EnumSet a) where
+    (<>) = union
+
+instance Enum a => Monoid (EnumSet a) where
+    mempty = empty
+
 empty :: Enum a => EnumSet a
 empty = EnumSet IntSet.empty
 
diff --git a/src/Language/Lexer/Tlex/Data/SymEnumSet.hs b/src/Language/Lexer/Tlex/Data/SymEnumSet.hs
--- a/src/Language/Lexer/Tlex/Data/SymEnumSet.hs
+++ b/src/Language/Lexer/Tlex/Data/SymEnumSet.hs
@@ -22,6 +22,12 @@
     }
     deriving (Eq, Show)
 
+instance Enum a => Semigroup (SymEnumSet a) where
+    (<>) = union
+
+instance Enum a => Monoid (SymEnumSet a) where
+    mempty = empty
+
 empty :: Enum a => SymEnumSet a
 empty = SymEnumSet
     { isStraight = True
diff --git a/tlex-core.cabal b/tlex-core.cabal
--- a/tlex-core.cabal
+++ b/tlex-core.cabal
@@ -2,7 +2,7 @@
 build-type:          Custom
 
 name:                tlex-core
-version:             0.1.0.0
+version:             0.2.0.0
 license:             Apache-2.0 OR MPL-2.0
 license-file:        LICENSE
 copyright:           (c) 2021 Mizunashi Mana
