diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for polysemy-path
 
+## v0.2.1.0
+
+* Remove dependency on polysemy-zoo.
+
 ## v0.2.0.0
 
 * Re-export the rest of path-0.8.0.
diff --git a/polysemy-path.cabal b/polysemy-path.cabal
--- a/polysemy-path.cabal
+++ b/polysemy-path.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.2.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-path
-version:        0.2.0.0
+version:        0.2.1.0
 synopsis:       Polysemy versions of Path functions.
 category:       Polysemy
 author:         Daniel Firth
@@ -31,9 +31,8 @@
       src
   ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints
   build-depends:
-      base >=4.7 && <5
-    , path >=0.8.0 && <0.9
-    , polysemy
-    , polysemy-extra >=0.1.7.0 && <0.2.0.0
-    , polysemy-plugin
+      base >=4.7 && <4.16
+    , path >=0.8.0 && <0.10
+    , polysemy >=1.3.0.0 && <1.7
+    , polysemy-extra >=0.1.7.0 && <0.3
   default-language: Haskell2010
diff --git a/src/Polysemy/Path.hs b/src/Polysemy/Path.hs
--- a/src/Polysemy/Path.hs
+++ b/src/Polysemy/Path.hs
@@ -1,150 +1,169 @@
-{-|
-Module      : Polysemy.Path
-License     : MIT
-Maintainer  : dan.firth@homotopic.tech
-Stability   : experimental
-
-Polysemy versions of functions in the path library.
--}
-{-# LANGUAGE DataKinds           #-}
-{-# LANGUAGE GADTs               #-}
-{-# LANGUAGE PolyKinds           #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-{-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-}
-module Polysemy.Path (
-  Path
-, Rel
-, Abs
-, File
-, Dir
-, SomeBase
-, PathException
-, Path.absdir
-, Path.reldir
-, Path.absfile
-, Path.relfile
-, (Path.</>)
-, stripProperPrefix
-, Path.isProperPrefixOf
-, Path.parent
-, Path.filename
-, Path.dirname
-, addExtension
-, splitExtension
-, fileExtension
-, replaceExtension
-, parseRelFile
-, parseAbsFile
-, parseRelDir
-, parseAbsDir
-, parseSomeDir
-, parseSomeFile
-, Path.toFilePath
-, Path.fromAbsDir
-, Path.fromRelDir
-, Path.fromAbsFile
-, Path.fromRelFile
-, Path.fromSomeDir
-, Path.fromSomeFile
-, Path.mkAbsDir
-, Path.mkRelDir
-, Path.mkAbsFile
-, Path.mkRelFile
-) where
+{-# LANGUAGE TypeApplications #-}
+{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}
 
+-- |
+-- Module      : Polysemy.Path
+-- License     : MIT
+-- Maintainer  : dan.firth@homotopic.tech
+-- Stability   : experimental
+--
+-- Polysemy versions of functions in the path library.
+module Polysemy.Path
+  ( Path,
+    Rel,
+    Abs,
+    File,
+    Dir,
+    SomeBase,
+    PathException,
+    Path.absdir,
+    Path.reldir,
+    Path.absfile,
+    Path.relfile,
+    (Path.</>),
+    stripProperPrefix,
+    Path.isProperPrefixOf,
+    Path.parent,
+    Path.filename,
+    Path.dirname,
+    addExtension,
+    splitExtension,
+    fileExtension,
+    replaceExtension,
+    parseRelFile,
+    parseAbsFile,
+    parseRelDir,
+    parseAbsDir,
+    parseSomeDir,
+    parseSomeFile,
+    Path.toFilePath,
+    Path.fromAbsDir,
+    Path.fromRelDir,
+    Path.fromAbsFile,
+    Path.fromRelFile,
+    Path.fromSomeDir,
+    Path.fromSomeFile,
+    Path.mkAbsDir,
+    Path.mkRelDir,
+    Path.mkAbsFile,
+    Path.mkRelFile,
+  )
+where
+
+import Control.Exception
+import Path (Abs, Dir, File, Path, PathException, Rel, SomeBase)
 import qualified Path
-import Path (Path, Rel, Abs, File, Dir, SomeBase, PathException)
 import Polysemy
 import Polysemy.Error
-import Polysemy.Extra
 
+-- | Irrefutably absorb a `PathException`. Use with extreme care.
+irrefutablePathException :: (Members '[Error PathException] r) => Either SomeException a -> Sem r a
+irrefutablePathException x = case x of
+  Left e -> let Just e' = Control.Exception.fromException @PathException e in Polysemy.Error.throw e'
+  Right a -> pure a
+
 -- | Polysemy version of `Path.parseRelFile`.
 --
 -- @since 0.1.0.0
-parseRelFile :: Members '[Error PathException] r
-             => FilePath
-             -> Sem r (Path Rel File)
-parseRelFile x = irrefutableAbsorbThrow (Path.parseRelFile x)
+parseRelFile ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (Path Rel File)
+parseRelFile x = irrefutablePathException (Path.parseRelFile x)
 
 -- | Polysemy version of `Path.parseAbsFile`.
 --
 -- @since 0.1.0.0
-parseAbsFile :: Members '[Error PathException] r
-             => FilePath
-             -> Sem r (Path Abs File)
-parseAbsFile x = irrefutableAbsorbThrow (Path.parseAbsFile x)
+parseAbsFile ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (Path Abs File)
+parseAbsFile x = irrefutablePathException (Path.parseAbsFile x)
 
 -- | Polysemy version of `Path.parseRelDir`.
 --
 -- @since 0.1.0.0
-parseRelDir :: Members '[Error PathException] r
-            => FilePath
-            -> Sem r (Path Rel Dir)
-parseRelDir x = irrefutableAbsorbThrow (Path.parseRelDir x)
+parseRelDir ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (Path Rel Dir)
+parseRelDir x = irrefutablePathException (Path.parseRelDir x)
 
 -- | Polysemy version of `Path.parseAbsDir`.
 --
 -- @since 0.1.0.0
-parseAbsDir :: Members '[Error PathException] r
-            => FilePath
-            -> Sem r (Path Abs Dir)
-parseAbsDir x = irrefutableAbsorbThrow (Path.parseAbsDir x)
+parseAbsDir ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (Path Abs Dir)
+parseAbsDir x = irrefutablePathException (Path.parseAbsDir x)
 
 -- | Polysemy version of `Path.parseSomeDir`.
 --
 -- @since 0.2.0.0
-parseSomeDir :: Members '[Error PathException] r
-             => FilePath
-             -> Sem r (SomeBase Dir)
-parseSomeDir x = irrefutableAbsorbThrow (Path.parseSomeDir x)
+parseSomeDir ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (SomeBase Dir)
+parseSomeDir x = irrefutablePathException (Path.parseSomeDir x)
 
 -- | Polysemy version of `Path.parseSomeFile`.
 --
 -- @since 0.2.0.0
-parseSomeFile :: Members '[Error PathException] r
-              => FilePath
-              -> Sem r (SomeBase File)
-parseSomeFile x = irrefutableAbsorbThrow (Path.parseSomeFile x)
+parseSomeFile ::
+  Members '[Error PathException] r =>
+  FilePath ->
+  Sem r (SomeBase File)
+parseSomeFile x = irrefutablePathException (Path.parseSomeFile x)
 
 -- | Polysemy version of `Path.stripProperPrefix`.
 --
 -- @since 0.1.0.0
-stripProperPrefix :: Members '[Error PathException] r
-                  => Path b Dir
-                  -> Path b t
-                  -> Sem r (Path Rel t)
-stripProperPrefix x y = irrefutableAbsorbThrow (Path.stripProperPrefix x y)
+stripProperPrefix ::
+  Members '[Error PathException] r =>
+  Path b Dir ->
+  Path b t ->
+  Sem r (Path Rel t)
+stripProperPrefix x y = irrefutablePathException (Path.stripProperPrefix x y)
 
 -- | Polysemy version of `Path.addExtension`.
 --
 -- @since 0.2.0.0
-addExtension :: Members '[Error PathException] r
-             => String
-             -> Path b File
-             -> Sem r (Path b File)
-addExtension x y = irrefutableAbsorbThrow (Path.addExtension x y)
+addExtension ::
+  Members '[Error PathException] r =>
+  String ->
+  Path b File ->
+  Sem r (Path b File)
+addExtension x y = irrefutablePathException (Path.addExtension x y)
 
 -- | Polysemy version of `Path.splitExtension`.
 --
 -- @since 0.2.0.0
-splitExtension :: Members '[Error PathException] r
-               => Path b File
-               -> Sem r (Path b File, String)
-splitExtension x = irrefutableAbsorbThrow (Path.splitExtension x)
+splitExtension ::
+  Members '[Error PathException] r =>
+  Path b File ->
+  Sem r (Path b File, String)
+splitExtension x = irrefutablePathException (Path.splitExtension x)
 
 -- | Polysemy version of `Path.replaceExtension`.
 --
 -- @since 0.2.0.0
-replaceExtension :: Members '[Error PathException] r
-             => String
-             -> Path b File
-             -> Sem r (Path b File)
-replaceExtension x y = irrefutableAbsorbThrow (Path.replaceExtension x y)
+replaceExtension ::
+  Members '[Error PathException] r =>
+  String ->
+  Path b File ->
+  Sem r (Path b File)
+replaceExtension x y = irrefutablePathException (Path.replaceExtension x y)
 
 -- | Polysemy version of `Path.fileExtension`.
 --
 -- @since 0.2.0.0
-fileExtension :: Members '[Error PathException] r
-              => Path b File
-              -> Sem r String
-fileExtension x = irrefutableAbsorbThrow (Path.fileExtension x)
+fileExtension ::
+  Members '[Error PathException] r =>
+  Path b File ->
+  Sem r String
+fileExtension x = irrefutablePathException (Path.fileExtension x)
