diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2017, Pepe Iborra
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+haskell-src-exts-observe
+========================
+Observable orphan instances for haskell-src-exts
diff --git a/haskell-src-exts-observe.cabal b/haskell-src-exts-observe.cabal
new file mode 100644
--- /dev/null
+++ b/haskell-src-exts-observe.cabal
@@ -0,0 +1,30 @@
+-- This file has been generated from package.yaml by hpack version 0.17.1.
+--
+-- see: https://github.com/sol/hpack
+
+name:           haskell-src-exts-observe
+version:        0.1.0
+synopsis:       Observable orphan instances for haskell-src-exts
+category:       language
+homepage:       https://github.com/pepeiborra/haskell-src-exts-observe
+author:         Jose Iborra
+maintainer:     pepeiborra@gmail.com
+copyright:      All Rights Reserved
+license:        BSD3
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
+
+extra-source-files:
+    README.md
+
+library
+  hs-source-dirs:
+      src
+  build-depends:
+      base < 5
+    , haskell-src-exts
+    , Hoed
+  exposed-modules:
+      Language.Haskell.Exts.Observe
+  default-language: Haskell2010
diff --git a/src/Language/Haskell/Exts/Observe.hs b/src/Language/Haskell/Exts/Observe.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/Exts/Observe.hs
@@ -0,0 +1,89 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+module Language.Haskell.Exts.Observe where
+
+import           Data.Ratio
+import           Debug.Hoed.Pure       hiding (Module)
+import           Language.Haskell.Exts
+
+instance Observable Boxed
+instance Observable a => Observable (Alt a)
+instance Observable a => Observable (Rhs a)
+instance Observable a => Observable (Asst a)
+instance Observable a => Observable (Context a)
+instance Observable a => Observable (ClassDecl a)
+instance Observable a => Observable (Assoc a)
+instance Observable a => Observable (Decl a)
+instance Observable a => Observable (Role a)
+instance Observable a => Observable (BooleanFormula a)
+instance Observable a => Observable (Annotation a)
+instance Observable a => Observable (Rule a)
+instance Observable a => Observable (RuleVar a)
+instance Observable a => Observable (Activation a)
+instance Observable a => Observable (Safety a)
+instance Observable a => Observable (CallConv a)
+instance Observable a => Observable (PatternSynDirection a)
+instance Observable a => Observable (Match a)
+instance Observable a => Observable (Op a)
+instance Observable a => Observable (InstDecl a)
+instance Observable a => Observable (InstHead a)
+instance Observable a => Observable (InstRule a)
+instance Observable a => Observable (Overlap a)
+instance Observable a => Observable (FunDep a)
+instance Observable a => Observable (FieldDecl a)
+instance Observable a => Observable (GadtDecl a)
+instance Observable a => Observable (Deriving a)
+instance Observable a => Observable (ConDecl a)
+instance Observable a => Observable (QualConDecl a)
+instance Observable a => Observable (DataOrNew a)
+instance Observable a => Observable (TypeEqn a)
+instance Observable a => Observable (InjectivityInfo a)
+instance Observable a => Observable (ResultSig a)
+instance Observable a => Observable (DeclHead a)
+instance Observable a => Observable (Binds a)
+instance Observable a => Observable (Exp a)
+instance Observable a => Observable (XAttr a)
+instance Observable a => Observable (Bracket a)
+instance Observable a => Observable (QualStmt a)
+instance Observable a => Observable (FieldUpdate a)
+instance Observable a => Observable (GuardedRhs a)
+instance Observable a => Observable (IPBind a)
+instance Observable a => Observable (IPName a)
+instance Observable a => Observable (Kind a)
+instance Observable a => Observable (Stmt a)
+instance Observable a => Observable (Literal a)
+instance Observable a => Observable (ModuleName a)
+instance Observable a => Observable (Name a)
+instance Observable a => Observable (XName a)
+instance Observable a => Observable (PXAttr a)
+instance Observable a => Observable (Pat a)
+instance Observable a => Observable (RPat a)
+instance Observable a => Observable (RPatOp a)
+instance Observable a => Observable (PatField a)
+instance Observable a => Observable (Promoted a)
+instance Observable a => Observable (QName a)
+instance Observable a => Observable (QOp a)
+instance Observable a => Observable (Sign a)
+instance Observable a => Observable (SpecialCon a)
+instance Observable a => Observable (Splice a)
+instance Observable a => Observable (TyVarBind a)
+instance Observable a => Observable (Type a)
+instance Observable a => Observable (Unpackedness a)
+instance Observable a => Observable (BangType a)
+instance Observable a => Observable (Module a)
+instance Observable a => Observable (ModuleHead a)
+instance Observable a => Observable (WarningText a)
+instance Observable a => Observable (ModulePragma a)
+instance Observable a => Observable (ImportDecl a)
+instance Observable a => Observable (ImportSpec a)
+instance Observable a => Observable (Namespace a)
+instance Observable a => Observable (ImportSpecList a)
+instance Observable a => Observable (ExportSpecList a)
+instance Observable a => Observable (EWildcard a)
+instance Observable a => Observable (CName a)
+instance Observable a => Observable (ExportSpec a)
+instance Observable Tool
+
+-- These instances belong in Hoed
+instance (Eq a, Show a) => Observable (Ratio a) where
+  observer = observeBase
+  constrain = constrainBase
