diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for polysemy-socket
 
+## v0.0.2.0
+
+* Remove dependency on polysemy-plugin.
+
 ## v0.0.1.0
 
-Added `Socket` effect with some interpreters.
+* Added `Socket` effect with some interpreters.
diff --git a/polysemy-socket.cabal b/polysemy-socket.cabal
--- a/polysemy-socket.cabal
+++ b/polysemy-socket.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-socket
-version:        0.0.1.0
+version:        0.0.2.0
 synopsis:       Socket effect for polysemy.
 category:       Polysemy
 author:         Daniel Firth
@@ -34,6 +34,5 @@
       base >=4.7 && <5
     , bytestring >=0.9 && <0.12
     , polysemy >=1.3.0.0 && <1.7
-    , polysemy-plugin >=0.3.0.0 && <0.5
     , socket >=0.5.0.0 && <0.9
   default-language: Haskell2010
diff --git a/src/Polysemy/Socket.hs b/src/Polysemy/Socket.hs
--- a/src/Polysemy/Socket.hs
+++ b/src/Polysemy/Socket.hs
@@ -9,7 +9,6 @@
 {-# LANGUAGE TemplateHaskell #-}
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE TypeOperators #-}
-{-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-}
 
 -- |
 --   Module     : Polysemy.Socket
@@ -74,15 +73,15 @@
 --
 -- @since 0.0.1.0
 traceSocket :: forall s k b c r a. Members '[Socket s k b c, Trace] r => Sem r a -> Sem r a
-traceSocket = intercept $ \case
-  Acquire -> trace "acquring" >> acquire
-  Bind s -> trace "binding" >> bind s
-  Listen s x -> trace "listening" >> listen s x
-  Receive s -> trace "receiving" >> receive s
-  Send s x -> trace "sending" >> send s x
-  Release s -> trace "releasing" >> release s
-  Accept s -> trace "accept" >> accept s
-  Close s -> trace "closing" >> close s
+traceSocket = intercept @(Socket s k b c) $ \case
+  Acquire -> trace "acquring" >> acquire @s @k @b @c
+  Bind s -> trace "binding" >> bind @s @k @b @c s
+  Listen s x -> trace "listening" >> listen @s @k @b @c s x
+  Receive s -> trace "receiving" >> receive @s @k @b @c s
+  Send s x -> trace "sending" >> send @s @k @b @c s x
+  Release s -> trace "releasing" >> release @s @k @b @c s
+  Accept s -> trace "accept" >> accept @s @k @b @c s
+  Close s -> trace "closing" >> close @s @k @b @c s
 {-# INLINE traceSocket #-}
 
 -- |
@@ -95,16 +94,16 @@
 -- |
 --
 -- @since 0.0.1.0
-adaptSocketSem :: Members '[Socket s k b' c'] r => (b' -> Sem r b) -> (c -> Sem r c') -> Sem (Socket s k b c ': r) a -> Sem r a
+adaptSocketSem :: forall s k b c b' c' r a. Members '[Socket s k b' c'] r => (b' -> Sem r b) -> (c -> Sem r c') -> Sem (Socket s k b c ': r) a -> Sem r a
 adaptSocketSem f g = interpret $ \case
-  Acquire -> acquire
-  Bind s -> bind s
-  Release s -> release s
-  Listen s x -> listen s x
-  Accept s -> accept s
-  Send s c -> g c >>= send s
-  Receive s -> receive s >>= f
-  Close s -> close s
+  Acquire -> acquire @s @k @b' @c'
+  Bind s -> bind @s @k @b' @c' s
+  Release s -> release @s @k @b' @c' s
+  Listen s x -> listen @s @k @b' @c' s x
+  Accept s -> accept @s @k @b' @c' s
+  Send s c -> g c >>= send @s @k @b' @c' s
+  Receive s -> receive @s @k @b' @c' s >>= f
+  Close s -> close @s @k @b' @c' s
 {-# INLINE adaptSocketSem #-}
 
 -- |
