diff --git a/Database/Groundhog/Postgresql/Geometry.hs b/Database/Groundhog/Postgresql/Geometry.hs
--- a/Database/Groundhog/Postgresql/Geometry.hs
+++ b/Database/Groundhog/Postgresql/Geometry.hs
@@ -251,10 +251,10 @@
 instance Intersects Lseg Lseg
 instance Intersects Path Path
 
-psqlOperatorExpr :: (SqlDb db, QueryRaw db ~ Snippet db, Expression db r a, Expression db r b) => String -> a -> b -> Expr db r c
+psqlOperatorExpr :: (SqlDb db, Expression db r a, Expression db r b) => String -> a -> b -> Expr db r c
 psqlOperatorExpr op x y = mkExpr $ operator 50 op x y
 
-psqlOperatorCond :: (SqlDb db, QueryRaw db ~ Snippet db, Expression db r a, Expression db r b) => String -> a -> b -> Cond db r
+psqlOperatorCond :: (SqlDb db, Expression db r a, Expression db r b) => String -> a -> b -> Cond db r
 psqlOperatorCond op x y = CondRaw $ operator 50 op x y
 
 
@@ -265,25 +265,25 @@
 -- | Translation
 -- 
 -- @box '((0,0),(1,1))' + point '(2.0,0)' = box '(3,1),(2,0)'@
-(+.) :: (SqlDb db, QueryRaw db ~ Snippet db, Plus a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r a
+(+.) :: (SqlDb db, Plus a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r a
 x +. y = mkExpr $ operator 60 "+" x y
 
 -- | Translation
 -- 
 -- @box '((0,0),(1,1))' - point '(2.0,0)' = box '(-1,1),(-2,0)'@
-(-.) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
+(-.) :: (SqlDb db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
 x -. y = mkExpr $ operator 60 "-" x y
 
 -- | Scaling/rotation
 -- 
 -- @box '((0,0),(1,1))' * point '(2.0,0)' = box '(2,2),(0,0)'@
-(*.) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
+(*.) :: (SqlDb db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
 x *. y = mkExpr $ operator 70 "*" x y
 
 -- | Scaling/rotation
 -- 
 -- @box '((0,0),(2,2))' / point '(2.0,0)' = box '(1,1),(0,0)'@
-(/.) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
+(/.) :: (SqlDb db, BoxCirclePathPoint a, ExpressionOf db r x a, ExpressionOf db r y Point) => x -> y -> Expr db r a
 x /. y = mkExpr $ operator 70 "/" x y
 
 -- | Point or box of intersection
@@ -291,129 +291,129 @@
 -- @lseg '((1,-1),(-1,1))' # '((1,1),(-1,-1))' = point '(0,0)'@
 --
 -- @box '((1,-1),(-1,1))' # '((1,1),(-1,-1))' = box '(1,1),(-1,-1)'@
-(#) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxLineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Expr db r a
+(#) :: (SqlDb db, BoxLineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Expr db r a
 (#) = psqlOperatorExpr "#"
 
 -- | Closest point to first operand on second operand
 -- 
 -- @point '(0,0)' ## lseg '((2,0),(0,2))' = point '(1,1)'@
-(##) :: (SqlDb db, QueryRaw db ~ Snippet db, Closest a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r Point
+(##) :: (SqlDb db, Closest a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r Point
 (##) = psqlOperatorExpr "##"
 
 -- | Distance between
 -- 
 -- @circle '((0,0),1)' <-> circle '((5,0),1)' = 3@
-(<->) :: (SqlDb db, QueryRaw db ~ Snippet db, Distance a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r Double
+(<->) :: (SqlDb db, Distance a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Expr db r Double
 (<->) = psqlOperatorExpr "<->"
 
 -- | Overlaps?
 -- 
 -- @box '((0,0),(1,1))' && box '((0,0),(2,2))' = true@
-(&&) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(&&) :: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (&&) = psqlOperatorCond "&&"
 
 -- | Is strictly left of?
 -- 
 -- @circle '((0,0),1)' << circle '((5,0),1)' = true@
-(<<) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(<<) :: (SqlDb db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (<<) = psqlOperatorCond "<<"
 
 -- | Is strictly right of?
 -- 
 -- @circle '((5,0),1)' >> circle '((0,0),1)' = true@
-(>>) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(>>) :: (SqlDb db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (>>) = psqlOperatorCond ">>"
 
 -- | Does not extend to the right of? box '((0,0),(1,1))' &< box '((0,0),(2,2))' = t
-(&<) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(&<) :: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (&<) = psqlOperatorCond "&<"
 
 -- | Does not extend to the left of?
 -- 
 -- @box '((0,0),(3,3))' &> box '((0,0),(2,2))' = true@
-(&>) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(&>) :: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (&>) = psqlOperatorCond "&>"
 
 -- | Is strictly below?
 -- 
 -- @box '((0,0),(3,3))' <<| box '((3,4),(5,5))' = true@
-(<<|) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(<<|) :: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (<<|) = psqlOperatorCond "<<|"
 
 -- | Is strictly above?
 -- 
 -- @box '((3,4),(5,5))' |>> box '((0,0),(3,3))'@
-(|>>):: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(|>>):: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (|>>) = psqlOperatorCond "|>>"
 
 -- | Does not extend above?
 -- 
 -- @box '((0,0),(1,1))' &<| box '((0,0),(2,2))' = true@
-(&<|):: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(&<|):: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (&<|) = psqlOperatorCond "&<|"
 
 -- | Does not extend below?
 -- 
 -- @box '((0,0),(3,3))' |&> box '((0,0),(2,2))' = true@
-(|&>) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(|&>) :: (SqlDb db, BoxCirclePolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (|&>) = psqlOperatorCond "|&>"
 
 -- | Is below (allows touching)?
 -- 
 -- @circle '((0,0),1)' <^ circle '((0,5),1)' = true@
-(<^) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxPoint a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(<^) :: (SqlDb db, BoxPoint a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (<^) = psqlOperatorCond "<^"
 
 -- | Is above (allows touching)?
 -- 
 -- @circle '((0,5),1)' >^ circle '((0,0),1)' = true@
-(>^) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxPoint a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(>^) :: (SqlDb db, BoxPoint a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (>^) = psqlOperatorCond ">^"
 
 -- | Intersects?
 -- 
 -- @lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))' = true@
-(?#) :: (SqlDb db, QueryRaw db ~ Snippet db, Intersects a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
+(?#) :: (SqlDb db, Intersects a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
 (?#) = psqlOperatorCond "?#"
 
 -- | Are horizontally aligned?
 -- 
 -- @point '(1,0)' ?- point '(0,0)' = true@
-(?-) :: (SqlDb db, QueryRaw db ~ Snippet db, ExpressionOf db r x Point, ExpressionOf db r y Point) => x -> y -> Cond db r
+(?-) :: (SqlDb db, ExpressionOf db r x Point, ExpressionOf db r y Point) => x -> y -> Cond db r
 (?-) = psqlOperatorCond "?-"
 
 -- | Are vertically aligned?
 -- 
 -- @point '(0,1)' ?| point '(0,0)' = true@
-(?|) :: (SqlDb db, QueryRaw db ~ Snippet db, ExpressionOf db r x Point, ExpressionOf db r y Point) => x -> y -> Cond db r
+(?|) :: (SqlDb db, ExpressionOf db r x Point, ExpressionOf db r y Point) => x -> y -> Cond db r
 (?|) = psqlOperatorCond "?|"
 
 -- | Is perpendicular?
 -- 
 -- @lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))' = true@
-(?-|) :: (SqlDb db, QueryRaw db ~ Snippet db, LineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(?-|) :: (SqlDb db, LineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (?-|) = psqlOperatorCond "?-|"
 
 -- | Are parallel?
 -- 
 -- @lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))' = true@
-(?||) :: (SqlDb db, QueryRaw db ~ Snippet db, LineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(?||) :: (SqlDb db, LineLseg a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (?||) = psqlOperatorCond "?||"
 
 -- | Contains?
 -- 
 -- @circle '((0,0),2)' \@> point '(1,1)' = true@
-(@>) :: (SqlDb db, QueryRaw db ~ Snippet db, Contains a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
+(@>) :: (SqlDb db, Contains a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
 (@>) = psqlOperatorCond "@>"
 
 -- | Contained in or on?
 -- 
 -- @point '(1,1)' <\@ circle '((0,0),2)' = true@
-(<@) :: (SqlDb db, QueryRaw db ~ Snippet db, Contained a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
+(<@) :: (SqlDb db, Contained a b, ExpressionOf db r x a, ExpressionOf db r y b) => x -> y -> Cond db r
 (<@) = psqlOperatorCond "<@"
 
 -- | Same as?
 -- 
 -- @polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' = true@
-(~=) :: (SqlDb db, QueryRaw db ~ Snippet db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
+(~=) :: (SqlDb db, BoxCirclePointPolygon a, ExpressionOf db r x a, ExpressionOf db r y a) => x -> y -> Cond db r
 (~=) = psqlOperatorCond "~="
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+0.5.0
+* Simplified Geometry and Array function type signatures
+* Compatibility with GHC 7.8
+
 0.4.2.2
 * Create missing schemas (or databases in MySQL terminology) during migration
 * Replace datatype Proxy with type variable
diff --git a/groundhog-postgresql.cabal b/groundhog-postgresql.cabal
--- a/groundhog-postgresql.cabal
+++ b/groundhog-postgresql.cabal
@@ -1,5 +1,5 @@
 name:            groundhog-postgresql
-version:         0.4.2.2
+version:         0.5.0
 license:         BSD3
 license-file:    LICENSE
 author:          Boris Lykah <lykahb@gmail.com>
@@ -21,7 +21,7 @@
                    , bytestring              >= 0.9
                    , blaze-builder           >= 0.3.0.0
                    , transformers            >= 0.2.1
-                   , groundhog               >= 0.4.2.2   && < 0.5.0
+                   , groundhog               >= 0.5.0     && < 0.6.0
                    , monad-control           >= 0.3
                    , monad-logger            >= 0.3
                    , containers              >= 0.2
