diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # shake-ats
 
+## 1.10.2.1
+
+  * Use oracle to track `HsCompiler` in rules
+
 ## 1.10.2.0
 
   * `genATS` takes `cpphs` parameter again
diff --git a/shake-ats.cabal b/shake-ats.cabal
--- a/shake-ats.cabal
+++ b/shake-ats.cabal
@@ -1,11 +1,12 @@
 cabal-version: 1.18
 name: shake-ats
-version: 1.10.2.0
+version: 1.10.2.1
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
 maintainer: vamchale@gmail.com
 author: Vanessa McHale
+tested-with: ghc ==8.4.4 ghc ==8.2.2 ghc ==8.6.3
 homepage: https://github.com/vmchale/shake-ats#readme
 synopsis: Utilities for building ATS projects with shake
 description:
diff --git a/src/Development/Shake/ATS/Rules.hs b/src/Development/Shake/ATS/Rules.hs
--- a/src/Development/Shake/ATS/Rules.hs
+++ b/src/Development/Shake/ATS/Rules.hs
@@ -54,7 +54,7 @@
 -- | These rules take a @.cabal@ file and the @.o@ file to be produced from
 -- them, building the @.o@ file.
 cabalForeign :: HsCompiler -> ForeignCabal -> Rules ()
-cabalForeign (GHC _ suff) (ForeignCabal cbp' cf' obf') = do
+cabalForeign hsc@GHC{} (ForeignCabal cbp' cf' obf') = do
 
     let cf = TL.unpack cf'
         cbp = maybe cf TL.unpack cbp'
@@ -62,12 +62,14 @@
         obfDir = takeDirectory (obf -<.> "hs")
         libName = takeBaseName cf
 
+    hcOracle <- hsOracle
+
     obf %> \out -> do
         let isHaskell path = not (".cabal" `isSuffixOf` path)
         (v, trDeps) <- liftIO $ second (filter isHaskell) <$> getCabalDeps cf
 
         ghcV' <- quietly ghcVersion
-        let ghcV = maybe ghcV' (drop 1) suff
+        ghcV <- maybe ghcV' (drop 1) . _suff <$> hcOracle hsc
 
         need (cf : fmap ((obfDir <> [pathSeparator]) <>) trDeps)
         command_ [Cwd obfDir] "cabal" ["new-build", "all", "-w", "ghc-" ++ ghcV]
