diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,28 @@
+CHANGES
+=======
+
+### 4.7.4 (2021-01-07)
+
+  - support utf8-string-1.0.2 ([#10](https://github.com/ddssff/listlike/issues/10))
+
+### 4.7.3 (2020-12-31)
+
+  - support bytestring-0.10.12 ([#7](https://github.com/ddssff/listlike/pull/7)) for ghc 8.10.3
+  - removed support for ghc 7.6 and 7.8 ([#6](https://github.com/ddssff/listlike/issues/6))
+
+### 4.7.2 (2020-08-21)
+
+  - support dlist-1.0 ([#4](https://github.com/ddssff/listlike/issues/4))
+
+### 4.7.1 (2020-07-03)
+
+  - support QuickCheck-2.14
+
+## 4.7
+
+  - make `GHC.Exts.IsList` a superclass of `ListLike` and use its `fromList` and `toList` methods
+  - make `Data.String.IsString` a superclass of `Stringlike` and use its `fromString` method
+  - add methods to `StringLike`: `show`, `fromText`, `fromLazyText`
+  - add a class `ListOps`, alternative to `ListLike`, that uses the `GHC.Exts.Item` instead of
+    the `item` type parameter
+  - supply `instance IsString Seq` for old versions of container
diff --git a/ListLike.cabal b/ListLike.cabal
--- a/ListLike.cabal
+++ b/ListLike.cabal
@@ -1,11 +1,10 @@
 Name: ListLike
-Version: 4.7.3
+Version: 4.7.4
 License: BSD3
 Maintainer: David Fox <dsf@seereason.com>
 Author: John Goerzen
 Copyright: Copyright (c) 2007-2008 John Goerzen
 license-file: COPYRIGHT
-extra-source-files: COPYRIGHT, README.md
 Category: list, string, text, bytestring, vector
 Cabal-Version: >= 1.10
 Build-Type: Simple
@@ -32,6 +31,10 @@
   GHC == 8.0.2
   GHC == 7.10.3
 
+extra-source-files:
+  README.md
+  CHANGELOG.md
+
 Library
   default-language: Haskell2010
   GHC-Options: -Wall
@@ -66,8 +69,21 @@
                 ,vector     >= 0.5   && < 0.13
                 ,dlist      >= 0.7   && < 1.1
                 ,fmlist     >= 0.8   && < 0.10
-                ,utf8-string
+                ,utf8-string >= 0.3.1 && < 1.1
                 ,deepseq
+
+  -- Remark: Atm, we don't comply with the Haskell Package Versioning Policy
+  --   https://pvp.haskell.org/
+  -- > §6. Client defines orphan instance.
+  -- > If a package defines an orphan instance, it MUST depend on the
+  -- > minor version of the packages that define the data type and the
+  -- > type class to be backwards compatible. For example,
+  -- > build-depends: mypkg >= 2.1.1 && < 2.1.2.
+  --
+  -- Since ListLike defines orphan instances, we would need to include
+  -- the minor version number in the upper bounds.
+  -- (See issues #7 and #10.)
+  -- However, this could involve a maintenance to relax upper bounds.
 
   If !impl(ghc >= 8.4)
     Build-Depends: semigroups >= 0.16 && < 0.20
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,18 +4,8 @@
 ListLike
 ========
 
-The `ListLike` package provides typeclasses and instances to allow
-polymorphism over many common datatypes.
-
-CHANGES
-=======
-
-Version 4.7
------------
+The `ListLike` package provides typeclasses and instances that
+polymorphically generalize list operations to many list-like types
+such as vectors, text, or difference lists.
 
-  * Make `GHC.Exts.IsList` a superclass of `ListLike` and use its `fromList` and `toList` methods
-  * make `Data.String.IsString` a superclass of `Stringlike` and use its `fromString` method
-  * Add methods to `StringLike`: `show`, `fromText`, `fromLazyText`
-  * Add a class `ListOps`, alternative to `ListLike`, that uses the `GHC.Exts.Item` instead of
-    the `item` type parameter.
-  * Supply `instance IsString Seq` for old versions of container
+Read the [introduction](https://hackage.haskell.org/package/ListLike/docs/Data-ListLike.html).
diff --git a/src/Data/ListLike/CharString.hs b/src/Data/ListLike/CharString.hs
--- a/src/Data/ListLike/CharString.hs
+++ b/src/Data/ListLike/CharString.hs
@@ -49,7 +49,6 @@
 import           Data.ListLike.IO
 import           Data.ListLike.FoldableLL
 import           Data.Int
-import           Data.Monoid
 import           Data.Semigroup (Semigroup(..))
 import           Data.String (IsString(..))
 import qualified Data.ByteString.Char8 as BS
diff --git a/src/Data/ListLike/Chars.hs b/src/Data/ListLike/Chars.hs
--- a/src/Data/ListLike/Chars.hs
+++ b/src/Data/ListLike/Chars.hs
@@ -14,7 +14,7 @@
 #endif
 import           Control.DeepSeq
 --import           Control.Monad
-import           Data.String as String (IsString(fromString))
+import           Data.String as String (IsString)
 import           Data.Semigroup (Semigroup(..))
 import qualified Data.Text.Lazy as T
 --import qualified Data.Text.Lazy.IO as TI
diff --git a/src/Data/ListLike/DList.hs b/src/Data/ListLike/DList.hs
--- a/src/Data/ListLike/DList.hs
+++ b/src/Data/ListLike/DList.hs
@@ -8,7 +8,7 @@
 import Data.ListLike.FoldableLL
 --import Data.ListLike.IO
 import Data.ListLike.String
-import Data.DList (DList(..))
+import Data.DList (DList)
 import qualified Data.DList as D
 --import Data.Foldable (Foldable)
 import qualified Data.Foldable as F
@@ -18,7 +18,6 @@
 import qualified Data.String as S
 import Control.Category
 import Data.Char (Char)
-import GHC.Exts (IsList(..))
 
 instance FoldableLL (DList a) a where
   foldl = F.foldl
diff --git a/src/Data/ListLike/FMList.hs b/src/Data/ListLike/FMList.hs
--- a/src/Data/ListLike/FMList.hs
+++ b/src/Data/ListLike/FMList.hs
@@ -18,7 +18,6 @@
 import Control.Monad.Zip (MonadZip)
 import qualified Control.Monad.Zip as Z
 --import Data.Function
-import Data.Char (Char)
 import GHC.Exts (IsList(..))
 
 instance FoldableLL (FMList a) a where
diff --git a/src/Data/ListLike/FoldableLL.hs b/src/Data/ListLike/FoldableLL.hs
--- a/src/Data/ListLike/FoldableLL.hs
+++ b/src/Data/ListLike/FoldableLL.hs
@@ -33,7 +33,6 @@
     ) where
 import Prelude hiding (foldl, foldr, foldr1, sequence_, mapM_, foldMap)
 import qualified Data.Foldable as F
-import Data.Monoid
 import Data.Maybe
 import qualified Data.List as L
 
diff --git a/src/Data/ListLike/Instances.hs b/src/Data/ListLike/Instances.hs
--- a/src/Data/ListLike/Instances.hs
+++ b/src/Data/ListLike/Instances.hs
@@ -39,7 +39,6 @@
                        splitAt, elem, notElem, unzip, lines, words,
                        unlines, unwords)
 import qualified Prelude as P
-import           Control.Applicative ((<$>), (<*>))
 import           Control.Monad
 import qualified Data.List as L
 import qualified Data.Sequence as S
@@ -54,7 +53,6 @@
 import           Data.ListLike.Vector ()
 import           Data.Int
 --import           Data.Maybe (fromMaybe)
-import           Data.Monoid
 import           Data.Semigroup (Semigroup(..))
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
@@ -64,7 +62,7 @@
 import           Data.Array.IArray((!), (//), Ix(..))
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.ByteString.Lazy.Char8 as BSLC
-import           Data.String (IsString(fromString))
+import           Data.String (IsString)
 --import           Data.String.UTF8 (UTF8)
 --import qualified Data.String.UTF8 as UTF8
 import qualified System.IO as IO
diff --git a/src/Data/ListLike/UTF8.hs b/src/Data/ListLike/UTF8.hs
--- a/src/Data/ListLike/UTF8.hs
+++ b/src/Data/ListLike/UTF8.hs
@@ -31,7 +31,9 @@
 import Data.Maybe (fromMaybe)
 import Data.Monoid (Monoid(..))
 import Data.Semigroup (Semigroup(..))
+#if !MIN_VERSION_utf8_string(1,0,2)
 import Data.String (IsString(fromString))
+#endif
 import Data.String.UTF8 (UTF8{-, UTF8Bytes-})
 import qualified Data.String.UTF8 as UTF8
 import GHC.Exts (IsList(..))
@@ -147,8 +149,10 @@
     -- writeFile = BS.writeFile
     -- appendFile = BS.appendFile
 
+#if !MIN_VERSION_utf8_string(1,0,2)
 instance IsString (UTF8 BS.ByteString) where
     fromString = UTF8.fromString
+#endif
 
 instance StringLike (UTF8 BS.ByteString) where
     toString = UTF8.toString
@@ -271,8 +275,10 @@
 instance Semigroup (UTF8 BSL.ByteString) where
   (<>) = mappend
 
+#if !MIN_VERSION_utf8_string(1,0,2)
 instance IsString (UTF8 BSL.ByteString) where
     fromString = UTF8.fromString
+#endif
 
 instance StringLike (UTF8 BSL.ByteString) where
     toString = UTF8.toString
diff --git a/src/Data/ListLike/Utils.hs b/src/Data/ListLike/Utils.hs
--- a/src/Data/ListLike/Utils.hs
+++ b/src/Data/ListLike/Utils.hs
@@ -40,7 +40,6 @@
 import Control.Monad (MonadPlus(..))
 import Data.ListLike.Base
 import Data.ListLike.FoldableLL
-import Data.Maybe (maybe)
 import Data.Monoid
 
 -- | Returns True if all elements are True
diff --git a/src/Data/ListLike/Vector/Generic.hs b/src/Data/ListLike/Vector/Generic.hs
--- a/src/Data/ListLike/Vector/Generic.hs
+++ b/src/Data/ListLike/Vector/Generic.hs
@@ -23,8 +23,7 @@
 import           Data.ListLike.Base
 import           Data.ListLike.FoldableLL
 import           Data.ListLike.String
-import           Data.Monoid
-import           Data.String (IsString(fromString))
+import           Data.String (IsString)
 import           GHC.Exts (IsList(..))
 
 instance {-# OVERLAPPABLE #-} V.Vector v a => FoldableLL (v a) a where
diff --git a/src/Data/ListLike/Vector/Storable.hs b/src/Data/ListLike/Vector/Storable.hs
--- a/src/Data/ListLike/Vector/Storable.hs
+++ b/src/Data/ListLike/Vector/Storable.hs
@@ -14,11 +14,9 @@
 import           Data.ListLike.Base
 import           Data.ListLike.FoldableLL
 import           Data.ListLike.String
-import           Data.String (IsString(fromString))
+import           Data.String (IsString)
 
-import           Data.Monoid
 import           Foreign.Storable (Storable)
-import           GHC.Exts (IsList(..))
 
 
 instance Storable a => FoldableLL (V.Vector a) a where
@@ -107,4 +105,3 @@
                           haystack
   | V.length needle == V.length haystack = needle == haystack
   | otherwise = False
-
diff --git a/src/Data/ListLike/Vector/Unboxed.hs b/src/Data/ListLike/Vector/Unboxed.hs
--- a/src/Data/ListLike/Vector/Unboxed.hs
+++ b/src/Data/ListLike/Vector/Unboxed.hs
@@ -14,10 +14,7 @@
 import           Data.ListLike.Base
 import           Data.ListLike.FoldableLL
 import           Data.ListLike.String
-import           Data.String (IsString(fromString))
-
-import           Data.Monoid
-import           GHC.Exts (IsList(..))
+import           Data.String (IsString)
 
 
 instance Unbox a => FoldableLL (V.Vector a) a where
@@ -106,4 +103,3 @@
                           haystack
   | V.length needle == V.length haystack = needle == haystack
   | otherwise = False
-
diff --git a/src/Data/ListLike/Vector/Vector.hs b/src/Data/ListLike/Vector/Vector.hs
--- a/src/Data/ListLike/Vector/Vector.hs
+++ b/src/Data/ListLike/Vector/Vector.hs
@@ -14,10 +14,7 @@
 import           Data.ListLike.Base
 import           Data.ListLike.FoldableLL
 import           Data.ListLike.String
-import           Data.String (IsString(fromString))
-
-import           Data.Monoid
-import           GHC.Exts (IsList(..))
+import           Data.String (IsString)
 
 instance FoldableLL (V.Vector a) a where
     foldl = V.foldl
