diff --git a/di-polysemy.cabal b/di-polysemy.cabal
--- a/di-polysemy.cabal
+++ b/di-polysemy.cabal
@@ -1,58 +1,51 @@
 cabal-version: 1.18
-name: di-polysemy
-version: 0.1.0.0
-license: MIT
-license-file: LICENSE
-copyright: 2020 Ben Simms
-maintainer: ben@bensimms.moe
-author: Ben Simms
-tested-with: ghc ==8.6.5
-homepage: https://github.com/nitros12/di-polysemy
-bug-reports: https://github.com/nitros12/di-polysemy/issues
-synopsis: DI logger wrapped for Polysemy
-description:
-    Please see the README on GitHub at <https://github.com/nitros12/di-polysemy>
-category: Logging
-build-type: Simple
+
+-- This file has been generated from package.yaml by hpack version 0.31.2.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: f161d8007cb345e44fd676ff9faabcebd48f4844b2004204f5288adb6a38f336
+
+name:           di-polysemy
+version:        0.1.1.0
+synopsis:       DI logger wrapped for Polysemy
+description:    Please see the README on GitHub at <https://github.com/nitros12/di-polysemy>
+category:       Logging
+homepage:       https://github.com/nitros12/di-polysemy
+bug-reports:    https://github.com/nitros12/di-polysemy/issues
+author:         Ben Simms
+maintainer:     ben@bensimms.moe
+copyright:      2020 Ben Simms
+license:        MIT
+license-file:   LICENSE
+tested-with:    GHC == 8.6.5
+build-type:     Simple
 extra-source-files:
     README.md
     CHANGELOG.md
     cabal.project
-extra-doc-files: README.md
-                 CHANGELOG.md
+extra-doc-files:
+    README.md
+    CHANGELOG.md
 
 source-repository head
-    type: git
-    location: https://github.com/nitros12/di-polysemy
+  type: git
+  location: https://github.com/nitros12/di-polysemy
 
 library
-    exposed-modules:
-        DiPolysemy
-    hs-source-dirs: src
-    other-modules:
-        Paths_di_polysemy
-    default-language: Haskell2010
-    default-extensions: TemplateHaskell RecursiveDo CPP
-                        AllowAmbiguousTypes BlockArguments NoMonomorphismRestriction
-                        AutoDeriveTypeable BangPatterns BinaryLiterals UndecidableInstances
-                        ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable
-                        DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable
-                        DoAndIfThenElse EmptyDataDecls ExistentialQuantification
-                        FlexibleContexts FlexibleInstances FunctionalDependencies GADTs
-                        DerivingVia DerivingStrategies GeneralizedNewtypeDeriving
-                        StandaloneDeriving DeriveAnyClass InstanceSigs KindSignatures
-                        LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf
-                        NamedFieldPuns OverloadedStrings OverloadedLabels
-                        PartialTypeSignatures PatternGuards PolyKinds RankNTypes
-                        RecordWildCards ScopedTypeVariables TupleSections TypeFamilies
-                        TypeSynonymInstances ViewPatterns DuplicateRecordFields
-                        TypeOperators TypeApplications RoleAnnotations PatternSynonyms
-    ghc-options: -fplugin=Polysemy.Plugin -Wall
-    build-depends:
-        base >=4.12 && <5,
-        df1 >=0.3.2 && <0.4,
-        di-core >=1.0.4 && <2,
-        di-df1 >=1.2 && <2,
-        di-handle >=1.0.1 && <2,
-        polysemy >=1.3 && <2,
-        polysemy-plugin ==0.2.*
+  exposed-modules:
+      DiPolysemy
+  other-modules:
+      Paths_di_polysemy
+  hs-source-dirs:
+      src
+  default-extensions: TemplateHaskell RecursiveDo CPP AllowAmbiguousTypes BlockArguments NoMonomorphismRestriction AutoDeriveTypeable BangPatterns BinaryLiterals UndecidableInstances ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs DerivingVia DerivingStrategies GeneralizedNewtypeDeriving StandaloneDeriving DeriveAnyClass InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns OverloadedStrings OverloadedLabels PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables TupleSections TypeFamilies TypeSynonymInstances ViewPatterns DuplicateRecordFields TypeOperators TypeApplications RoleAnnotations PatternSynonyms
+  ghc-options: -Wall
+  build-depends:
+      base >=4.12 && <5
+    , df1 >=0.3.2 && <0.4
+    , di-core >=1.0.4 && <2
+    , di-df1 >=1.2 && <2
+    , di-handle >=1.0.1 && <2
+    , polysemy >=1.3 && <2
+  default-language: Haskell2010
diff --git a/src/DiPolysemy.hs b/src/DiPolysemy.hs
--- a/src/DiPolysemy.hs
+++ b/src/DiPolysemy.hs
@@ -75,10 +75,10 @@
     go :: Member (Embed IO) r0 => DC.Di level D.Path msg -> Sem (Di level D.Path msg ': r0) a0 -> Sem r0 a0
     go di m = (`interpretH` m) $ \case
       Log level msg -> do
-        t <- embed $ DC.log di level msg
+        t <- embed @IO $ DC.log di level msg
         pureT t
       Flush         -> do
-        t <- embed $ DC.flush di
+        t <- embed @IO $ DC.flush di
         pureT t
       Push s m'     -> do
         mm <- runT m'
@@ -89,56 +89,56 @@
 
 runDiToStderrIO :: Member (Embed IO) r => Sem (Di D.Level D.Path D.Message ': r) a -> Sem r a
 runDiToStderrIO m = do
-  commit <- embed $ DH.stderr Df1.df1
+  commit <- embed @IO $ DH.stderr Df1.df1
   runDiToIO commit m
 
-attr :: (D.ToValue value, Member (Di level D.Path msg) r) => D.Key -> value -> Sem r a -> Sem r a
-attr k v = attr_ k (D.value v)
+attr :: forall value level msg r a. (D.ToValue value, Member (Di level D.Path msg) r) => D.Key -> value -> Sem r a -> Sem r a
+attr k v = attr_ @level @msg k (D.value v)
 
-debug :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-debug = log D.Debug . D.message
+debug :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+debug = log @D.Level @path D.Debug . D.message
 
-info :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-info = log D.Info . D.message
+info :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+info = log @D.Level @path D.Info . D.message
 
-notice :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-notice = log D.Notice . D.message
+notice :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+notice = log @D.Level @path D.Notice . D.message
 
-warning :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-warning = log D.Warning . D.message
+warning :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+warning = log @D.Level @path D.Warning . D.message
 
-error :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-error = log D.Error . D.message
+error :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+error = log @D.Level @path D.Error . D.message
 
-alert :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-alert = log D.Alert . D.message
+alert :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+alert = log @D.Level @path D.Alert . D.message
 
-critical :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-critical = log D.Critical . D.message
+critical :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+critical = log @D.Level @path D.Critical . D.message
 
-emergency :: (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
-emergency = log D.Emergency . D.message
+emergency :: forall msg path r. (D.ToMessage msg, Member (Di D.Level path D.Message) r) => msg -> Sem r ()
+emergency = log @D.Level @path D.Emergency . D.message
 
-debug_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-debug_ = log D.Debug
+debug_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+debug_ = log @D.Level @path D.Debug
 
-info_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-info_ = log D.Info
+info_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+info_ = log @D.Level @path D.Info
 
-notice_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-notice_ = log D.Notice
+notice_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+notice_ = log @D.Level @path D.Notice
 
-warning_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-warning_ = log D.Warning
+warning_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+warning_ = log @D.Level @path D.Warning
 
-error_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-error_ = log D.Error
+error_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+error_ = log @D.Level @path D.Error
 
-alert_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-alert_ = log D.Alert
+alert_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+alert_ = log @D.Level @path D.Alert
 
-critical_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-critical_ = log D.Critical
+critical_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+critical_ = log @D.Level @path D.Critical
 
-emergency_ :: Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
-emergency_ = log D.Emergency
+emergency_ :: forall path r. Member (Di D.Level path D.Message) r => D.Message -> Sem r ()
+emergency_ = log @D.Level @path D.Emergency
