diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## [v1.4.1.1](https://github.com/diagrams/diagrams-core/tree/v1.4.1.1) (2018-06-17)
+
+* Add some `ConstraintKinds` pragmas to allow compilation on GHC 7.8 and 7.6
+
 ## [v1.4.1](https://github.com/diagrams/diagrams-core/tree/v1.4.1) (2018-04-10)
 
 * Allow `base-4.11`
diff --git a/diagrams-core.cabal b/diagrams-core.cabal
--- a/diagrams-core.cabal
+++ b/diagrams-core.cabal
@@ -1,5 +1,5 @@
 Name:                diagrams-core
-Version:             1.4.1
+Version:             1.4.1.1
 Synopsis:            Core libraries for diagrams EDSL
 Description:         The core modules underlying diagrams,
                      an embedded domain-specific language
@@ -12,7 +12,7 @@
 Bug-reports:         https://github.com/diagrams/diagrams-core/issues
 Category:            Graphics
 Build-type:          Simple
-Cabal-version:       >=1.18
+Cabal-version:       1.18
 Extra-source-files:  CHANGELOG.md, README.markdown, diagrams/*.svg
 extra-doc-files:     diagrams/*.svg
 Tested-with:         GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.1
@@ -40,7 +40,7 @@
                        containers >= 0.4.2 && < 0.6,
                        unordered-containers >= 0.2 && < 0.3,
                        semigroups >= 0.8.4 && < 0.19,
-                       monoid-extras >= 0.3 && < 0.5,
+                       monoid-extras >= 0.3 && < 0.6,
                        dual-tree >= 0.2 && < 0.3,
                        lens >= 4.0 && < 4.17,
                        linear >= 1.11.3 && < 1.21,
diff --git a/src/Diagrams/Core/Compile.hs b/src/Diagrams/Core/Compile.hs
--- a/src/Diagrams/Core/Compile.hs
+++ b/src/Diagrams/Core/Compile.hs
@@ -1,8 +1,10 @@
+{-# LANGUAGE ConstraintKinds       #-}
 {-# LANGUAGE CPP                   #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE MonoLocalBinds        #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
+{-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE TypeOperators         #-}
 
 -----------------------------------------------------------------------------
diff --git a/src/Diagrams/Core/Envelope.hs b/src/Diagrams/Core/Envelope.hs
--- a/src/Diagrams/Core/Envelope.hs
+++ b/src/Diagrams/Core/Envelope.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP                        #-}
+{-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -255,10 +256,9 @@
 
 -- | When dealing with envelopes we often want scalars to be an
 --   ordered field (i.e. support all four arithmetic operations and be
---   totally ordered) so we introduce this class as a convenient
+--   totally ordered) so we introduce this constraint as a convenient
 --   shorthand.
-class (Floating s, Ord s) => OrderedField s
-instance (Floating s, Ord s) => OrderedField s
+type OrderedField s = (Floating s, Ord s)
 
 -- | @Enveloped@ abstracts over things which have an envelope.
 class (Metric (V a), OrderedField (N a)) => Enveloped a where
diff --git a/src/Diagrams/Core/HasOrigin.hs b/src/Diagrams/Core/HasOrigin.hs
--- a/src/Diagrams/Core/HasOrigin.hs
+++ b/src/Diagrams/Core/HasOrigin.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds       #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
diff --git a/src/Diagrams/Core/Juxtapose.hs b/src/Diagrams/Core/Juxtapose.hs
--- a/src/Diagrams/Core/Juxtapose.hs
+++ b/src/Diagrams/Core/Juxtapose.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds       #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
diff --git a/src/Diagrams/Core/Trace.hs b/src/Diagrams/Core/Trace.hs
--- a/src/Diagrams/Core/Trace.hs
+++ b/src/Diagrams/Core/Trace.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE CPP                        #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
diff --git a/src/Diagrams/Core/Transform.hs b/src/Diagrams/Core/Transform.hs
--- a/src/Diagrams/Core/Transform.hs
+++ b/src/Diagrams/Core/Transform.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -308,14 +309,12 @@
 --  The Transformable class  -------------------------------
 ------------------------------------------------------------
 
--- | 'HasLinearMap' is a poor man's class constraint synonym, just to
+-- | 'HasLinearMap' is a constraint synonym, just to
 --   help shorten some of the ridiculously long constraint sets.
-class (HasBasis v, Traversable v) => HasLinearMap v
-instance (HasBasis v, Traversable v) => HasLinearMap v
+type HasLinearMap v = (HasBasis v, Traversable v)
 
 -- | An 'Additive' vector space whose representation is made up of basis elements.
-class (Additive v, Representable v, Rep v ~ E v) => HasBasis v
-instance (Additive v, Representable v, Rep v ~ E v) => HasBasis v
+type HasBasis v = (Additive v, Representable v, Rep v ~ E v)
 
 -- | Type class for things @t@ which can be transformed.
 class Transformable t where
diff --git a/src/Diagrams/Core/Types.hs b/src/Diagrams/Core/Types.hs
--- a/src/Diagrams/Core/Types.hs
+++ b/src/Diagrams/Core/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE CPP                   #-}
 {-# LANGUAGE DeriveDataTypeable    #-}
 {-# LANGUAGE DeriveFunctor         #-}
@@ -168,11 +169,10 @@
 -- XXX TODO: add lots of actual diagrams to illustrate the
 -- documentation!  Haddock supports \<\<inline image urls\>\>.
 
--- | Class of numbers that are 'RealFloat' and 'Typeable'. This class is used to
---   shorten type constraints.
-class (Typeable n, RealFloat n) => TypeableFloat n
-instance (Typeable n, RealFloat n) => TypeableFloat n
--- use class instead of type constraint so users don't need constraint kinds pragma
+-- | Constraint for numeric types that are 'RealFloat' and 'Typeable',
+--   which often occur together.  This is used to shorten shorten type
+--   constraint contexts.
+type TypeableFloat n = (Typeable n, RealFloat n)
 
 ------------------------------------------------------------
 --  Diagrams  ----------------------------------------------
diff --git a/src/Diagrams/Core/V.hs b/src/Diagrams/Core/V.hs
--- a/src/Diagrams/Core/V.hs
+++ b/src/Diagrams/Core/V.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ConstraintKinds       #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies          #-}
@@ -77,11 +78,9 @@
 
 -- | @InSpace v n a@ means the type @a@ belongs to the vector space @v n@,
 --   where @v@ is 'Additive' and @n@ is a 'Num'.
-class (V a ~ v, N a ~ n, Additive v, Num n) => InSpace v n a
-instance (V a ~ v, N a ~ n, Additive v, Num n) => InSpace v n a
+type InSpace v n a = (V a ~ v, N a ~ n, Additive v, Num n)
 
 -- | @SameSpace a b@ means the types @a@ and @b@ belong to the same
 --   vector space @v n@.
-class (V a ~ V b, N a ~ N b) => SameSpace a b
-instance (V a ~ V b, N a ~ N b) => SameSpace a b
+type SameSpace a b = (V a ~ V b, N a ~ N b)
 
