diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for path-like
 
+## (v0.1.1.0)
+
+* Add 'PathLike` superclass to `FileLike` and `DirLike`.
+
 ## (v0.1.0.0)
 
 * Add `FileLike` and `DirLike` type class for using stricter types as `Path b File` and `Path b Dir` respectively.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # path-like - Type classes for the Path library.
 
-This library exports two type classes `FileLike` and `DirLike` which serve as a
+This library exports type classes `PathLike`, `FileLike` and `DirLike` which serve as a
 common interface for compiling types down to `Path b File` and `Path b Dir`.
 The only contract that should be respected is that your type should be at least
 as strict as the `Path` type itself, i.e no String/FilePath instances. This is
diff --git a/path-like.cabal b/path-like.cabal
--- a/path-like.cabal
+++ b/path-like.cabal
@@ -5,9 +5,9 @@
 -- see: https://github.com/sol/hpack
 
 name:           path-like
-version:        0.1.0.0
-synopsis:       FileLike and DirLike type classes for the Path library.
-description:    Type classes for the Path library. Exports FileLike and DirLike classes so that stricter types may be used as Paths.
+version:        0.1.1.0
+synopsis:       PathLike, FileLike and DirLike type classes for the Path library.
+description:    Type classes for the Path library. Exports PathLike, FileLike and DirLike classes so that stricter types may be used as Paths.
 category:       Filesystem
 author:         Daniel Firth
 maintainer:     dan.firth@homotopic.tech
diff --git a/src/Path/Like.hs b/src/Path/Like.hs
--- a/src/Path/Like.hs
+++ b/src/Path/Like.hs
@@ -13,26 +13,33 @@
 -}
 
 module Path.Like (
-  FileLike(..)
+  PathLike(..)
+, FileLike(..)
 , DirLike(..)
 , (/>)
 ) where
 
 import Path
 
+-- | Class representing a type `a` that can be compiled down to a `Path b t`.
+class PathLike b t a | a -> b, a -> t where
+  toPath :: a -> Path b t
+
 -- | Class representing a type `a` that can be compiled down to a `Path b File`.
-class FileLike b a | a -> b where
+class PathLike b File a => FileLike b a where
   toFile :: a -> Path b File
+  toFile = toPath
 
--- | Class representing a type `a` that can be compiled down to a `Path b Dir`.
-class DirLike b a | a -> b where
+-- | Class repreenting a type `a` that can be compiled down to a `Path b Dir`.
+class PathLike b Dir a => DirLike b a where
   toDir :: a -> Path b Dir
+  toDir = toPath
 
-instance FileLike b (Path b File) where
-  toFile = id
+instance PathLike b t (Path b t) where
+  toPath = id
 
-instance DirLike b (Path b Dir) where
-  toDir = id
+instance FileLike b (Path b File)
+instance DirLike b (Path b Dir)
 
 -- | Like `Path.</>`, but works for any `DirLike` and relative `FileLike` to produce a concrete `Path`.
 (/>) :: (DirLike b a, FileLike Rel c) => a -> c -> Path b File
