diff --git a/Data/Real/Constructible.hs b/Data/Real/Constructible.hs
--- a/Data/Real/Constructible.hs
+++ b/Data/Real/Constructible.hs
@@ -55,7 +55,7 @@
 import Data.Complex.Generic.TH (deriveComplexF)
 import Data.Ratio ((%), numerator, denominator)
 import Data.Typeable (Typeable)
-import Math.NumberTheory.Powers.Squares (exactSquareRoot)
+import Math.NumberTheory.Roots (exactSquareRoot)
 import Numeric.Search.Integer (search)
 import Text.Read (Lexeme (..), Read (..), lexP, parens, prec, readListPrecDefault, step)
 import Text.Read.Lex (numberToInteger)
@@ -63,8 +63,8 @@
 data FieldShape = QShape | SqrtShape !FieldShape deriving Show
 
 data Field k where
-  Q :: Field QShape
-  Sqrt :: !(Field k) -> !(Elt k) -> Field (SqrtShape k)
+  Q :: Field 'QShape
+  Sqrt :: !(Field k) -> !(Elt k) -> Field ('SqrtShape k)
 
 instance Show (Field k) where
   showsPrec _ Q = showString "Q"
@@ -72,9 +72,9 @@
     showParen (d > 9) $ showsPrec 9 k . showString "[sqrt " . showsPrecK k 10 r . showString "]"
 
 type family Elt (k :: FieldShape)
-type instance Elt QShape = Rational
+type instance Elt 'QShape = Rational
 data SqrtElt k = SqrtZero | SqrtElt !(Elt k) !(Elt k)
-type instance Elt (SqrtShape k) = SqrtElt k
+type instance Elt ('SqrtShape k) = SqrtElt k
 
 sqrtElt :: Field k -> Elt k -> Elt k -> SqrtElt k
 sqrtElt k a b | isZeroK k a && isZeroK k b = SqrtZero
@@ -183,7 +183,7 @@
 (-!), (+!), (*!), (/!) :: (Int -> ShowS) -> (Int -> ShowS) -> Int -> ShowS
 infixl 6 +!, -!
 infixl 7 *!, /!
-negateS s d = showParen (d > 6) $ showChar '-' . s 6
+negateS s d = showParen (d > 6) $ showChar '-' . s 7
 (+!) s1 s2 d = showParen (d > 6) $ s1 6 . showString " + " . s2 7
 (-!) s1 s2 d = showParen (d > 6) $ s1 6 . showString " - " . s2 7
 (*!) s1 s2 d = showParen (d > 7) $ s1 7 . showChar '*' . s2 8
@@ -351,8 +351,7 @@
   log = throw (Unconstructible "log")
   a ** b = go (numerator b') (denominator b') where
     b' = toRational b
-    go p q = let (n, p') = divMod p q in
-      (if n >= 0 then a^n else 1/a^(-n))*go' p' q
+    go p q = let (n, p') = divMod p q in a^^n*go' p' q
     go' 0 _ = 1
     go' p q = case divMod q 2 of
       (q', 0) -> sqrt (go p q')
@@ -386,7 +385,7 @@
 
 instance Enum Construct where
   succ = (+ 1)
-  pred = (subtract 1)
+  pred = subtract 1
   toEnum = fromIntegral
   fromEnum = fromInteger . truncate
   enumFrom n = n `seq` (n : enumFrom (n + 1))
diff --git a/constructible.cabal b/constructible.cabal
--- a/constructible.cabal
+++ b/constructible.cabal
@@ -1,5 +1,5 @@
 name:                constructible
-version:             0.1.0.1
+version:             0.1.1
 synopsis:            Exact computation with constructible real numbers
 description:
   The constructible reals are the subset of the real numbers that can
@@ -19,10 +19,10 @@
 library
   exposed-modules:     Data.Real.Constructible
   build-depends:
-    arithmoi >=0.1,
     base ==4.*,
     binary-search >=0.0,
-    complex-generic >=0.1
+    complex-generic >=0.1,
+    integer-roots >=1.0
   ghc-options:       -Wall
 
 source-repository head
