diff --git a/simple-effects.cabal b/simple-effects.cabal
--- a/simple-effects.cabal
+++ b/simple-effects.cabal
@@ -1,57 +1,63 @@
-name:                simple-effects
-version:             0.9.0.0
-synopsis:            A simple effect system that integrates with MTL
-description:         Please see README.md
-homepage:            https://gitlab.com/LukaHorvat/simple-effects
-license:             BSD3
-license-file:        LICENSE
-author:              Luka Horvat
-maintainer:          luka.horvat9@gmail.com
-copyright:           2016 Luka Horvat
-category:            Control
-build-type:          Simple
-cabal-version:       >=1.10
-
-library
-  exposed-modules:     Control.Effects
-                     , Control.Effects.State
-                     , Control.Effects.Reader
-                     , Control.Effects.List
-                     , Control.Effects.Signal
-                     , Control.Effects.Early
-                     , Control.Effects.Parallel
-                     , Control.Monad.Runnable
-  other-modules:       Import
-  hs-source-dirs:      src
-  default-language:    Haskell2010
-  build-depends:       base >= 4.7 && < 5
-                     , transformers
-                     , mtl
-                     , monad-control == 1.0.*
-                     , transformers-base == 0.4.*
-                     , list-t
-                     , array
-                     , MonadRandom
-                     , exceptions
-                     , text
-  ghc-options:         -Wall
-
-test-suite tests
-    hs-source-dirs:    test
-    main-is:           Main.hs
-    default-language:  Haskell2010
-    type:              exitcode-stdio-1.0
-    build-depends:     base >= 4.7 && < 5
-                     , simple-effects
-    ghc-options:       -Wall -threaded -with-rtsopts=-N
-
-benchmark bench-effects
-  type:                exitcode-stdio-1.0
-  hs-source-dirs:      bench
-  main-is:             Bench.hs
-  build-depends:       base
-                     , criterion
-                     , mtl
-                     , transformers
-                     , simple-effects
-  default-language:    Haskell2010
+name: simple-effects
+version: 0.9.0.1
+cabal-version: >=1.10
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+copyright: 2016 Luka Horvat
+maintainer: luka.horvat9@gmail.com
+homepage: https://gitlab.com/LukaHorvat/simple-effects
+synopsis: A simple effect system that integrates with MTL
+description:
+    Please see README.md
+category: Control
+author: Luka Horvat
+
+library
+    exposed-modules:
+        Control.Effects
+        Control.Effects.State
+        Control.Effects.Reader
+        Control.Effects.List
+        Control.Effects.Signal
+        Control.Effects.Early
+        Control.Effects.Parallel
+        Control.Monad.Runnable
+    build-depends:
+        base >=4.7 && <5,
+        transformers >=0.5.2.0,
+        mtl >=2.2.1,
+        monad-control ==1.0.*,
+        transformers-base ==0.4.*,
+        list-t >=1,
+        array >=0.5.1.1,
+        MonadRandom >=0.5.1,
+        exceptions >=0.8.3,
+        text >=1.2.2.1
+    default-language: Haskell2010
+    hs-source-dirs: src
+    other-modules:
+        Import
+    ghc-options: -Wall
+
+test-suite tests
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    build-depends:
+        base >=4.7 && <5,
+        simple-effects >=0.9.0.1
+    default-language: Haskell2010
+    hs-source-dirs: test
+    ghc-options: -Wall -threaded -with-rtsopts=-N
+
+benchmark bench-effects
+    type: exitcode-stdio-1.0
+    main-is: Bench.hs
+    build-depends:
+        base >=4.9.1.0,
+        criterion >=1.1.4.0,
+        mtl >=2.2.1,
+        transformers >=0.5.2.0,
+        simple-effects >=0.9.0.1
+    default-language: Haskell2010
+    hs-source-dirs: bench
diff --git a/src/Control/Effects/Signal.hs b/src/Control/Effects/Signal.hs
--- a/src/Control/Effects/Signal.hs
+++ b/src/Control/Effects/Signal.hs
@@ -45,8 +45,9 @@
 instance TypeError (UnhandledError a b)
       => MonadEffect (Signal a b) IO where
     effect = undefined
-instance (Monad m, b ~ c) => MonadEffect (Signal a c) (EffectHandler (Signal a b) m) where
-    effect = effect @(Signal a b)
+instance {-# OVERLAPPING #-} (Monad m, b ~ c) =>
+    MonadEffect (Signal a c) (EffectHandler (Signal a b) m) where
+    effect msg = EffectHandler (ReaderT (($ msg) . getEffectWithKind))
 
 signal :: MonadEffect (Signal a b) m => a -> m b
 signal a = getSignalRes <$> effect (SignalMsg a)
