diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.2.0
+
+### Breaking Change
+- Fusion.Plugin.Types is no longer exported from this package. If you
+  want to annotate the types in your library, use the package
+  fusion-plugin-types.
+
 ## 0.1.1
 
 ### Bug Fixes
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -31,11 +31,14 @@
 
 ## Solution
 
-This plugin provides the programmer with a way to annotate certain types
-using a `Fuse` pragma. The programmer would annotate the types that are
-to be eliminated by fusion. During the simplifier phase the plugin goes through
-the relevant bindings and if one of these types are found inside a binding then
-that binding is marked to be inlined irrespective of the size.
+This plugin provides the programmer with a way to annotate certain
+types using a `Fuse` pragma from the
+[fusion-plugin-types](https://hackage.haskell.org/package/fusion-plugin-types)
+package. The programmer would annotate the types that are to be
+eliminated by fusion. During the simplifier phase the plugin goes
+through the relevant bindings and if one of these types are found
+inside a binding then that binding is marked to be inlined
+irrespective of the size.
 
 ## Using the plugin
 
@@ -46,6 +49,13 @@
 To use this plugin, add this package to your `build-depends`
 and pass the following to your ghc-options: `ghc-options: -O2
 -fplugin=Fusion.Plugin`
+
+## See also
+
+If you are a library author looking to annotate the types, you need to
+use the
+[fusion-plugin-types](https://hackage.haskell.org/package/fusion-plugin-types)
+package.
 
 ## Contributing
 
diff --git a/fusion-plugin.cabal b/fusion-plugin.cabal
--- a/fusion-plugin.cabal
+++ b/fusion-plugin.cabal
@@ -1,14 +1,16 @@
 cabal-version:       2.2
 
 name:                fusion-plugin
-version:             0.1.1
+version:             0.2.0
 synopsis:            GHC plugin to make stream fusion more predictable.
 description:
   This plugin provides the programmer with a way to annotate certain
-  types using a 'Fuse' pragma. The programmer would annotate the types
-  that are to be eliminated by fusion. During the simplifier phase the
-  plugin goes through the relevant bindings and if one of these types
-  are found inside a binding then that binding is marked to be inlined
+  types using a 'Fuse' pragma from the
+  <https://hackage.haskell.org/package/fusion-plugin-types fusion-plugin-types>
+  package. The programmer would annotate the types that are to be
+  eliminated by fusion. During the simplifier phase the plugin goes
+  through the relevant bindings and if one of these types are found
+  inside a binding then that binding is marked to be inlined
   irrespective of the size.
   .
   This plugin was primarily motivated by
@@ -25,17 +27,19 @@
 category:            Development
 extra-source-files:  CHANGELOG.md
                      README.md
+                     stack.yaml
 
 source-repository head
     type: git
     location: https://github.com/composewell/fusion-plugin
 
 library
-  exposed-modules:     Fusion.Plugin.Types
-                       Fusion.Plugin
+  exposed-modules:     Fusion.Plugin
   build-depends:       base >= 4.0    && <  5.0
                      , syb  >= 0.7    && <  0.8
                      , ghc  >= 7.10.3 && <= 8.8.2
+
+                     , fusion-plugin-types >= 0.1 && < 0.2
   hs-source-dirs:      src
   ghc-options:         -Wall
   if impl(ghc >= 8.0)
diff --git a/src/Fusion/Plugin.hs b/src/Fusion/Plugin.hs
--- a/src/Fusion/Plugin.hs
+++ b/src/Fusion/Plugin.hs
@@ -32,6 +32,7 @@
 -- At the right places, fusion can provide dramatic performance improvements
 -- (e.g. 10x) to the code.
 
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 {-# LANGUAGE CPP #-}
 
 module Fusion.Plugin
@@ -52,6 +53,7 @@
 import Control.Monad (when)
 import Data.Generics.Schemes (everywhere)
 import Data.Generics.Aliases (mkT)
+import Outputable (Outputable(..), text)
 
 import qualified Data.List as DL
 
@@ -330,3 +332,7 @@
 
 plugin :: Plugin
 plugin = defaultPlugin {installCoreToDos = install}
+
+-- Orphan instance for 'Fuse'
+instance Outputable Fuse where
+    ppr _ = text "Fuse"
diff --git a/src/Fusion/Plugin/Types.hs b/src/Fusion/Plugin/Types.hs
deleted file mode 100644
--- a/src/Fusion/Plugin/Types.hs
+++ /dev/null
@@ -1,42 +0,0 @@
--- |
--- Module      : Fusion.Plugin.Types
--- Copyright   : (c) 2019 Composewell Technologies
---
--- License     : BSD-3-Clause
--- Maintainer  : pranaysashank@composewell.com
--- Stability   : experimental
--- Portability : GHC
-
-{-# LANGUAGE DeriveDataTypeable #-}
-
-module Fusion.Plugin.Types
-    ( Fuse (..)
-    )
-where
-
-import Data.Data (Data)
-import Outputable (Outputable(..), text)
-
--- | A GHC annotation to inform the plugin to aggressively inline join points
--- that perform a case match on the constructors of the annotated type.
--- Inlining enables case-of-case transformations that would potentially
--- eliminate the constructors.
---
--- This annotation is to be used on types whose constructors are known to be
--- involved in case-of-case transformations enabling stream fusion via
--- elimination of those constructors.
---
--- It is advised to use unique types for intermediate stream state that is to
--- be annotated with 'Fuse'. If the annotated type is also used for some
--- other purpose this annotation may inline code that is not involved in stream
--- fusion and should otherwise not be inlined.
---
--- @
--- {-\# ANN type Step Fuse #-}
--- data Step s a = Yield a s | Skip s | Stop
--- @
-data Fuse = Fuse
-    deriving (Eq, Data)
-
-instance Outputable Fuse where
-    ppr _ = text "Fuse"
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,5 @@
+resolver: lts-14.20
+packages:
+- '.'
+extra-deps:
+    - fusion-plugin-types-0.1.0
