diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+# v0.1.0.0
+
+- Support for `ghc` 8.10.
+- Support for `haskeline` 0.8.
+- Support for `fused-effects` 1.1
+
+
 # v0.0.0.0
 
 Initial release.
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 BSD 3-Clause License
 
-Copyright (c) 2019, Rob Rix
+Copyright (c) 2019-2020, Rob Rix
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# `fused-effects-readline`
+
+A `readline`-like effect & carrier for `fused-effects`.
diff --git a/fused-effects-readline.cabal b/fused-effects-readline.cabal
--- a/fused-effects-readline.cabal
+++ b/fused-effects-readline.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.2
 
 name:                fused-effects-readline
-version:             0.0.0.0
+version:             0.1.0.0
 synopsis:            A readline-like effect and carrier for fused-effects
 description:         A readline-like effect and carrier for fused-effects, using haskeline under the hood
 homepage:            https://github.com/fused-effects/fused-effects-readline
@@ -10,11 +10,17 @@
 license-file:        LICENSE
 author:              Rob Rix
 maintainer:          rob.rix@me.com
-copyright:           2019 Rob Rix
+copyright:           2019-2020 Rob Rix
 category:            Development
 extra-source-files:
+  README.md
   CHANGELOG.md
 
+tested-with:
+  GHC == 8.6.5
+  GHC == 8.8.3
+  GHC == 8.10.1
+
 common common
   default-language: Haskell2010
   ghc-options:
@@ -28,10 +34,14 @@
     -Wno-name-shadowing
     -Wno-safe
     -Wno-unsafe
-  if (impl(ghc >= 8.6))
+  if impl(ghc >= 8.6)
     ghc-options: -Wno-star-is-type
-  if (impl(ghc >= 8.8))
+  if impl(ghc >= 8.8)
     ghc-options: -Wno-missing-deriving-strategies
+  if impl(ghc >= 8.10)
+    ghc-options:
+      -Wno-missing-safe-haskell-mode
+      -Wno-prepositive-qualified-module
 
 library
   import: common
@@ -40,15 +50,18 @@
     Control.Carrier.Readline.Haskeline
     Control.Effect.Readline
   build-depends:
-      base >= 4.12 && < 5
-    , directory ^>= 1.3.3.2
-    , filepath ^>= 1.4.2.1
-    , fused-effects ^>= 1
-    , haskeline ^>= 0.7
-    , prettyprinter ^>= 1.5
+    , base >= 4.12 && < 5
+    , directory ^>= 1.3
+    , filepath ^>= 1.4
+    , fused-effects ^>= 1.1
+    , haskeline >= 0.7 && < 0.9
+    , prettyprinter >= 1.5 && <1.7
     , prettyprinter-ansi-terminal ^>= 1.1
     , terminal-size ^>= 0.3
     , transformers >= 0.4 && < 0.6
+  if impl(ghc >= 8.10)
+    build-depends:
+      , exceptions ^>= 0.10
 
 test-suite test
   import: common
diff --git a/src/Control/Carrier/Readline/Haskeline.hs b/src/Control/Carrier/Readline/Haskeline.hs
--- a/src/Control/Carrier/Readline/Haskeline.hs
+++ b/src/Control/Carrier/Readline/Haskeline.hs
@@ -1,4 +1,10 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, LambdaCase, MultiParamTypeClasses, ScopedTypeVariables, TypeApplications #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+{-# OPTIONS_GHC -Wno-redundant-constraints #-}
 module Control.Carrier.Readline.Haskeline
 ( -- * Readline carrier
   runReadline
@@ -12,10 +18,12 @@
 import Control.Carrier.Lift
 import Control.Carrier.Reader
 import Control.Effect.Readline
+#if MIN_VERSION_haskeline(0, 8, 0)
+import Control.Monad.Catch (MonadMask(..))
+#endif
 import Control.Monad.Fix (MonadFix)
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Trans.Class (MonadTrans(..))
-import Data.Coerce (coerce)
 import Data.Text.Prettyprint.Doc
 import Data.Text.Prettyprint.Doc.Render.Terminal
 import System.Console.Haskeline
@@ -25,10 +33,18 @@
 import System.FilePath
 import System.IO (stdout)
 
+#if MIN_VERSION_haskeline(0, 8, 0)
+runReadline :: (MonadIO m, MonadMask m) => Prefs -> Settings m -> ReadlineC m a -> m a
+#else
 runReadline :: MonadException m => Prefs -> Settings m -> ReadlineC m a -> m a
-runReadline prefs settings (ReadlineC m) = runInputTWithPrefs prefs (coerce settings) (runM (runReader (Line 0) m))
+#endif
+runReadline prefs settings (ReadlineC m) = runInputTWithPrefs prefs settings (runM (runReader (Line 0) m))
 
+#if MIN_VERSION_haskeline(0, 8, 0)
+runReadlineWithHistory :: (MonadIO m, MonadMask m) => ReadlineC m a -> m a
+#else
 runReadlineWithHistory :: MonadException m => ReadlineC m a -> m a
+#endif
 runReadlineWithHistory block = do
   homeDir <- liftIO getHomeDirectory
   prefs   <- liftIO $ readPrefs (homeDir </> ".haskeline")
@@ -43,24 +59,29 @@
 
   runReadline prefs settings block
 
-newtype ReadlineC m a = ReadlineC { runReadlineC :: ReaderC Line (LiftC (InputT m)) a }
+newtype ReadlineC m a = ReadlineC (ReaderC Line (LiftC (InputT m)) a)
   deriving (Applicative, Functor, Monad, MonadFix, MonadIO)
 
 instance MonadTrans ReadlineC where
   lift = ReadlineC . lift . lift . lift
 
+#if MIN_VERSION_haskeline(0, 8, 0)
+instance (MonadIO m, MonadMask m) => Algebra Readline (ReadlineC m) where
+#else
 instance MonadException m => Algebra Readline (ReadlineC m) where
-  alg = \case
-    Prompt prompt k -> ReadlineC $ do
+#endif
+  alg _ sig ctx = case sig of
+    Prompt prompt -> ReadlineC $ do
       str <- sendM (getInputLine @m (cyan <> prompt <> plain))
       Line line <- ask
-      local increment (runReadlineC (k line str))
+      local increment $ pure ((line, str) <$ ctx)
       where cyan = "\ESC[1;36m\STX"
             plain = "\ESC[0m\STX"
-    Print doc k -> do
+    Print doc -> do
       s <- maybe 80 Size.width <$> liftIO size
-      liftIO (renderIO stdout (layoutSmart defaultLayoutOptions { layoutPageWidth = AvailablePerLine s 0.8 } (doc <> line)))
-      k
+      let docstream = layoutSmart (layoutOptions s) (doc <> line)
+      (<$ ctx) <$> (liftIO . renderIO stdout $ docstream)
+      where layoutOptions s = defaultLayoutOptions { layoutPageWidth = AvailablePerLine s 0.8 }
 
 
 newtype Line = Line Int
diff --git a/src/Control/Effect/Readline.hs b/src/Control/Effect/Readline.hs
--- a/src/Control/Effect/Readline.hs
+++ b/src/Control/Effect/Readline.hs
@@ -1,4 +1,5 @@
-{-# LANGUAGE DeriveFunctor, DeriveGeneric #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE KindSignatures #-}
 module Control.Effect.Readline
 ( -- * Readline effect
   Readline(..)
@@ -11,22 +12,18 @@
 ) where
 
 import Control.Algebra
+import Data.Kind (Type)
 import Data.Text.Prettyprint.Doc (Doc)
 import Data.Text.Prettyprint.Doc.Render.Terminal (AnsiStyle)
-import GHC.Generics (Generic1)
 import Prelude hiding (print)
 
 prompt :: Has Readline sig m => String -> m (Int, Maybe String)
-prompt p = send (Prompt p (curry pure))
+prompt p = send (Prompt p)
 
 print :: Has Readline sig m => Doc AnsiStyle -> m ()
-print s = send (Print s (pure ()))
+print s = send (Print s)
 
 
-data Readline m k
-  = Prompt String (Int -> Maybe String -> m k)
-  | Print (Doc AnsiStyle) (m k)
-  deriving (Functor, Generic1)
-
-instance HFunctor Readline
-instance Effect   Readline
+data Readline (m :: Type -> Type) (k :: Type) where
+  Prompt :: String -> Readline m (Int, Maybe String)
+  Print :: Doc AnsiStyle -> Readline m ()
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -2,5 +2,7 @@
 ( main
 ) where
 
+import Control.Carrier.Readline.Haskeline ()
+
 main :: IO ()
 main = pure ()
