diff --git a/ListLike.cabal b/ListLike.cabal
--- a/ListLike.cabal
+++ b/ListLike.cabal
@@ -1,5 +1,5 @@
 Name: ListLike
-Version: 4.0.2
+Version: 4.1.0
 License: BSD3
 Maintainer: John Lato <jwlato@gmail.com>
 Author: John Goerzen
@@ -25,13 +25,13 @@
 
 Library
   Hs-Source-Dirs: src
-  Exposed-Modules: Data.ListLike,
-          Data.ListLike.Base,
-          Data.ListLike.CharString,
-          Data.ListLike.FoldableLL,
-          Data.ListLike.IO,
-          Data.ListLike.Instances,
-          Data.ListLike.String,
+  Exposed-Modules: Data.ListLike
+          Data.ListLike.Base
+          Data.ListLike.CharString
+          Data.ListLike.FoldableLL
+          Data.ListLike.IO
+          Data.ListLike.Instances
+          Data.ListLike.String
           Data.ListLike.Text
           Data.ListLike.Text.Text
           Data.ListLike.Text.TextLazy
@@ -41,6 +41,8 @@
           Data.ListLike.Vector.Storable
           Data.ListLike.Vector.Unboxed
           Data.ListLike.Vector.Vector
+          Data.ListLike.DList
+          Data.ListLike.FMList
   -- Other-Modules: Data.ConfigFile.Lexer
   Build-Depends: base       >= 3     && < 5
                 ,containers >= 0.3   && < 0.6
@@ -48,6 +50,8 @@
                 ,array      >= 0.3   && < 0.6
                 ,text       >= 0.11  && < 1.2
                 ,vector     >= 0.5   && < 0.11
+                ,dlist      >= 0.7   && < 0.9
+                ,fmlist     >= 0.8   && < 0.9
   
 Test-suite listlike-tests
   Hs-source-dirs: src testsrc
@@ -63,6 +67,8 @@
                   ,array
                   ,bytestring
                   ,containers
+                  ,dlist
+                  ,fmlist
                   ,text
                   ,vector
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -3,16 +3,18 @@
 ListLike
 ========
 
-The ListLike package provides typeclasses and instances to allow
+The `ListLike` package provides typeclasses and instances to allow
 polymorphism over many common datatypes.
 
 Installation
 ------------
 
-The package can be built/installed with Cabal.  If you have cabal-install,
-simply run "cabal install ListLike" to install the package.  Without
-cabal-install, execute the following commands:
+The package can be built/installed with Cabal.  If you have `cabal-install`,
+simply run `cabal install ListLike` to install the package.  Without
+`cabal-install`, execute the following commands:
 
+```
 $ runghc Setup.hs configure
 $ runghc Setup.hs build
 $ runghc Setup.hs install
+```
diff --git a/src/Data/ListLike.hs b/src/Data/ListLike.hs
--- a/src/Data/ListLike.hs
+++ b/src/Data/ListLike.hs
@@ -121,6 +121,8 @@
 import Data.ListLike.CharString
 import Data.ListLike.FoldableLL
 import Data.ListLike.Instances()
+import Data.ListLike.DList
+import Data.ListLike.FMList
 import Data.ListLike.String
 import Data.ListLike.Utils
 import Data.ListLike.IO
diff --git a/src/Data/ListLike/DList.hs b/src/Data/ListLike/DList.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/ListLike/DList.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses, FlexibleInstances #-}
+-- | 'Data.ListLike.ListLike' instances for 'Data.DList.DList'
+module Data.ListLike.DList () where
+import qualified Prelude as P
+import Data.ListLike.Base
+import Data.ListLike.FoldableLL
+import Data.ListLike.IO
+import Data.ListLike.String
+import Data.DList (DList(..))
+import qualified Data.DList as D
+import Data.Foldable (Foldable)
+import qualified Data.Foldable as F
+import Data.Traversable (Traversable)
+import qualified Data.Traversable as T
+import Data.String (IsString)
+import qualified Data.String as S
+import Control.Category
+import Data.Char (Char(..))
+
+instance FoldableLL (DList a) a where
+  foldl = F.foldl
+  foldr = D.foldr
+  foldl1 = F.foldl1
+  foldr1 = F.foldr1
+  foldl' = F.foldl'
+  foldr' = F.foldr'
+
+instance ListLike (DList a) a where
+  empty = D.empty
+  singleton = D.singleton
+  cons = D.cons
+  snoc = D.snoc
+  append = D.append
+  head = D.head
+  tail = D.tail
+  rigidMap = D.map
+  null = null . D.toList
+  toList = D.toList
+  fromList = D.fromList
+  replicate = D.replicate
+
+instance StringLike (DList Char) where
+  toString = D.toList
+  fromString = D.fromList
+  lines = map D.fromList . S.lines . D.toList
+  words = map D.fromList . S.words . D.toList
+  unlines = D.fromList . S.unlines . map D.toList
+  unwords = D.fromList . S.unwords . map D.toList
diff --git a/src/Data/ListLike/FMList.hs b/src/Data/ListLike/FMList.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/ListLike/FMList.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
+-- | 'Data.ListLike.ListLike' instances for 'Data.FMList.FMList'
+module Data.ListLike.FMList () where
+import qualified Prelude as P
+import Data.ListLike.Base
+import Data.ListLike.FoldableLL
+import Data.ListLike.IO
+import Data.ListLike.String
+import Data.FMList (FMList(..))
+import qualified Data.FMList as FM
+import Data.Foldable (Foldable)
+import qualified Data.Foldable as F
+import Data.Traversable (Traversable)
+import qualified Data.Traversable as T
+import Data.String (IsString)
+import qualified Data.String as S
+import Control.Monad.Zip (MonadZip)
+import qualified Control.Monad.Zip as Z
+import Data.Function
+import Data.Char (Char(..))
+
+instance FoldableLL (FMList a) a where
+  foldl = F.foldl
+  foldr = F.foldr
+  foldl1 = F.foldl1
+  foldr1 = F.foldr1
+  foldl' = F.foldl'
+  foldr' = F.foldr'
+
+instance ListLike (FMList a) a where
+  empty = FM.empty
+  singleton = FM.singleton
+  cons = FM.cons
+  snoc = FM.snoc
+  append = FM.append
+  head = FM.head
+  tail = FM.tail
+  last = FM.last
+  init = FM.init
+  fromList = FM.fromList
+  toList = FM.toList
+  null = FM.null
+  genericLength = FM.genericLength
+  length = FM.length
+  reverse = FM.reverse
+  filter = FM.filter
+  take = FM.take
+  takeWhile = FM.takeWhile
+  drop = FM.drop
+  dropWhile = FM.dropWhile
+
+instance InfiniteListLike (FMList a) a where
+  iterate = FM.iterate
+  repeat = FM.repeat
+  cycle a = (a `FM.append` cycle a) `FM.append` a
+
+instance IsString (FMList Char) where
+  fromString = FM.fromList
+
+instance StringLike (FMList Char) where
+  fromString = FM.fromList
+  toString = FM.toList
+  lines = map FM.fromList . S.lines . FM.toList
+  words = map FM.fromList . S.words . FM.toList
+  unlines = FM.fromList . S.unlines . map FM.toList
+  unwords = FM.fromList . S.unwords . map FM.toList
+
+instance MonadZip FMList where
+  mzipWith = FM.zipWith
diff --git a/src/Data/ListLike/Vector.hs b/src/Data/ListLike/Vector.hs
--- a/src/Data/ListLike/Vector.hs
+++ b/src/Data/ListLike/Vector.hs
@@ -1,5 +1,5 @@
--- | ListLike instances for several @Data.Vector@ types.
--- The `Data.ListLike.Vector.Generic` instances are not exported from this
+-- | 'Data.ListLike.ListLike' instances for several @Data.Vector@ types.
+-- The @Data.ListLike.Vector.Generic@ instances are not exported from this
 -- module in order to prevent collisions.
 --
 module Data.ListLike.Vector (
diff --git a/testsrc/TestInfrastructure.hs b/testsrc/TestInfrastructure.hs
--- a/testsrc/TestInfrastructure.hs
+++ b/testsrc/TestInfrastructure.hs
@@ -25,6 +25,8 @@
 import qualified Data.ByteString.Lazy as BSL
 import qualified Data.ListLike as LL
 import qualified Data.Array as A
+import qualified Data.DList as DL
+import qualified Data.FMList as FM
 import qualified Data.Sequence as S
 import qualified Data.Foldable as F
 import qualified Data.Text as T
@@ -36,10 +38,16 @@
 import System.IO
 import qualified Test.HUnit as HU
 import Text.Printf
+import Data.Function (on)
 import Data.Word
 import Data.List
 import Data.Monoid
 
+simpleArb :: (LL.ListLike f i, Arbitrary i) => Gen f
+simpleArb = sized (\n -> choose (0, n) >>= myVector)
+    where myVector n = do
+            arblist <- vector n
+            return (LL.fromList arblist)
 
 instance (Arbitrary i) => Arbitrary (MyList i) where
     arbitrary = sized (\n -> choose (0, n) >>= myVector)
@@ -51,6 +59,20 @@
 instance (CoArbitrary i) => CoArbitrary (MyList i) where
     coarbitrary l = coarbitrary (LL.toList l)
 
+instance (Arbitrary i) => Arbitrary (DL.DList i) where
+    arbitrary = simpleArb
+    shrink = map LL.fromList . shrink . LL.toList
+
+instance (CoArbitrary i) => CoArbitrary (DL.DList i) where
+    coarbitrary l = coarbitrary (LL.toList l)
+
+instance (Arbitrary i) => Arbitrary (FM.FMList i) where
+    arbitrary = simpleArb
+    shrink = map LL.fromList . shrink . LL.toList
+
+instance (CoArbitrary i) => CoArbitrary (FM.FMList i) where
+    coarbitrary l = coarbitrary (LL.toList l)
+
 instance (Arbitrary i) => Arbitrary (S.Seq i) where
     arbitrary = sized (\n -> choose (0, n) >>= myVector)
         where myVector n =
@@ -150,8 +172,12 @@
 
 instance (Arbitrary a, Show a, Eq a) => TestLL [a] a where
 
-instance (Arbitrary a, Show a, Eq a) => TestLL (MyList a) a where
+instance (Arbitrary a, Show a, Eq a) => TestLL (MyList a) a
 
+instance (Arbitrary a, Show a, Eq a) => TestLL (DL.DList a) a
+
+instance (Arbitrary a, Show a, Eq a) => TestLL (FM.FMList a) a
+
 instance TestLL BS.ByteString Word8 where
 
 instance TestLL BSL.ByteString Word8 where
@@ -170,6 +196,9 @@
 
 instance (Arbitrary a, Show a, Eq a, VU.Unbox a) => TestLL (VU.Vector a) a where
 
+instance Eq a => Eq (FM.FMList a) where
+    (==) = (==) `on` FM.toList
+
 mapRemoveDups :: (Eq k1) => [(k1, v1)] -> [(k1, v1)]
 mapRemoveDups = nubBy (\(k1, _) (k2, _) -> k1 == k2)
 
@@ -266,6 +295,8 @@
      w "Array Int Int" (x::LLTest (A.Array Int Int) Int),
      w "Array Int Bool" (x::LLTest (A.Array Int Bool) Bool),
      w "Array (Just Int)" (x::LLTest (A.Array Int (Maybe Int)) (Maybe Int)),
+     w "DList Int" (x::LLTest (DL.DList Int) Int),
+     -- w "FMList Int" (x::LLTest (FM.FMList Int) Int),
      w "Vector Int" (x::LLTest (V.Vector Int) Int),
      w "StorableVector Int" (x::LLTest (VS.Vector Int) Int),
      w "UnboxVector Int" (x::LLTest (VU.Vector Int) Int),
@@ -282,6 +313,8 @@
     [w "String" (x::LLTest String Char),
      w "MyList Char" (x::LLTest (MyList Char) Char),
      w "Sequence Char" (x::LLTest (S.Seq Char) Char),
+     w "DList Char" (x::LLTest (DL.DList Char) Char),
+     -- w "FMList Char" (x::LLTest (FM.FMList Char) Char),
      w "ByteString" (x::LLTest BS.ByteString Word8),
      w "ByteString.Lazy" (x::LLTest BSL.ByteString Word8),
      w "Array Int Char" (x::LLTest (A.Array Int Char) Char),
