diff --git a/external-stg-interpreter/lib/Stg/Interpreter.hs b/external-stg-interpreter/lib/Stg/Interpreter.hs
index ac9b929..7f36f2e 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter.hs
@@ -10,6 +10,7 @@ import Foreign.Ptr
 import Control.Concurrent
 import Control.Concurrent.MVar
 import qualified Control.Concurrent.Chan.Unagi.Bounded as Unagi
+import Control.Monad (forM_, forM, unless, when)
 import Control.Monad.State.Strict
 import Control.Exception
 import qualified Data.Primitive.ByteArray as BA
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Base.hs b/external-stg-interpreter/lib/Stg/Interpreter/Base.hs
index f56e611..bbe4969 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Base.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Base.hs
@@ -4,6 +4,7 @@ module Stg.Interpreter.Base where
 import Data.Word
 import Foreign.Ptr
 import Foreign.C.Types
+import Control.Monad (unless, forM, forM_)
 import Control.Monad.State.Strict
 import Data.List (foldl')
 import Data.Set (Set)
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Debug.hs b/external-stg-interpreter/lib/Stg/Interpreter/Debug.hs
index 991e77e..eae9c14 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Debug.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Debug.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings #-}
 module Stg.Interpreter.Debug where
 
+import Control.Monad (forM_, unless)
 import qualified GHC.Exts as Exts
 import qualified Data.Set as Set
 import qualified Data.IntMap as IntMap
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Debugger.hs b/external-stg-interpreter/lib/Stg/Interpreter/Debugger.hs
index d83ed2d..c39a018 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Debugger.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Debugger.hs
@@ -2,6 +2,7 @@
 module Stg.Interpreter.Debugger where
 
 import GHC.Stack
+import Control.Monad (unless)
 import Control.Monad.State
 import qualified Data.Set as Set
 import qualified Data.Map as Map
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Internal.hs b/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Internal.hs
index 3c6c85b..6d37b96 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Internal.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Internal.hs
@@ -3,6 +3,7 @@ module Stg.Interpreter.Debugger.Internal where
 
 import Text.Printf
 import qualified Text.Read as Text
+import Control.Monad (forM_, unless)
 import Control.Monad.State
 import qualified Data.List as List
 import qualified Data.Set as Set
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Region.hs b/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Region.hs
index ca5705c..ab6b17f 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Region.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Debugger/Region.hs
@@ -2,6 +2,7 @@
 module Stg.Interpreter.Debugger.Region where
 
 import Text.Printf
+import Control.Monad (forM_, unless, when)
 import Control.Monad.State
 import qualified Data.List as List
 import qualified Data.Set as Set
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/FFI.hs b/external-stg-interpreter/lib/Stg/Interpreter/FFI.hs
index f091fcd..322f752 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/FFI.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/FFI.hs
@@ -41,6 +41,7 @@ import Data.IntMap (IntMap)
 import qualified Data.IntMap as IntMap
 
 import GHC.Stack
+import Control.Monad (zipWithM)
 import Control.Monad.State.Strict
 import Control.Concurrent.MVar
 
@@ -503,4 +504,4 @@ buildCWrapperHsTypeMap mods = do
   liftIO $ do
     putStrLn $ "CWrappers:"
     forM_ (Map.toList m) $ \(k, v) -> print k >> print v
-  -}
\ No newline at end of file
+  -}
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/GC.hs b/external-stg-interpreter/lib/Stg/Interpreter/GC.hs
index e53ad63..22f44cf 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/GC.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/GC.hs
@@ -2,6 +2,7 @@
 module Stg.Interpreter.GC where
 
 import Text.Printf
+import Control.Monad (unless, forM_, when)
 import Control.Monad.State
 import qualified Data.Map as Map
 import Data.IntMap (IntMap)
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/GC/GCRef.hs b/external-stg-interpreter/lib/Stg/Interpreter/GC/GCRef.hs
index 17ce6c8..f5710bd 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/GC/GCRef.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/GC/GCRef.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, FlexibleInstances #-}
 module Stg.Interpreter.GC.GCRef where
 
+import Control.Monad (forM_)
 import Control.Monad.State
 import Foreign.Ptr
 
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/GC/LiveDataAnalysis.hs b/external-stg-interpreter/lib/Stg/Interpreter/GC/LiveDataAnalysis.hs
index cd1df95..62b84fe 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/GC/LiveDataAnalysis.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/GC/LiveDataAnalysis.hs
@@ -3,6 +3,7 @@
 module Stg.Interpreter.GC.LiveDataAnalysis where
 
 import GHC.Generics
+import Control.Monad (foldM, forM_, unless)
 import Control.Monad.State
 import qualified Data.IntSet as IntSet
 import qualified Data.Map as Map
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/GC/RetainerAnalysis.hs b/external-stg-interpreter/lib/Stg/Interpreter/GC/RetainerAnalysis.hs
index a06687e..3842781 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/GC/RetainerAnalysis.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/GC/RetainerAnalysis.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings #-}
 module Stg.Interpreter.GC.RetainerAnalysis where
 
+import Control.Monad (unless)
 import Control.Monad.State
 import Data.Set (Set)
 import qualified Data.Set as Set
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/IOManager.hs b/external-stg-interpreter/lib/Stg/Interpreter/IOManager.hs
index 0f8ef7a..79ead9c 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/IOManager.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/IOManager.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
 module Stg.Interpreter.IOManager where
 
+import Control.Monad (forM_, unless, when)
 import Control.Monad.State
 import Data.IntMap (IntMap)
 import qualified Data.IntMap as IntMap
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Addr.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Addr.hs
index 76f8967..adb7deb 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Addr.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Addr.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms, Strict #-}
 module Stg.Interpreter.PrimOp.Addr where
 
+import Control.Monad
 import Control.Monad.State
 import Data.Char
 import Data.Word
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/ByteArray.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/ByteArray.hs
index f8aefa5..6f6dfb3 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/ByteArray.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/ByteArray.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms #-}
 module Stg.Interpreter.PrimOp.ByteArray where
 
+import Control.Monad (when)
 import Data.Bits
 import Data.Int
 import Data.Word
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Concurrency.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Concurrency.hs
index 4191d9f..daf5001 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Concurrency.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Concurrency.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms #-}
 module Stg.Interpreter.PrimOp.Concurrency where
 
+import Control.Monad
 import Control.Monad.State
 import qualified Data.ByteString.Char8 as BS8
 import qualified Data.IntMap as IntMap
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/DelayWait.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/DelayWait.hs
index d1a5906..a4dedc9 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/DelayWait.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/DelayWait.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms #-}
 module Stg.Interpreter.PrimOp.DelayWait where
 
+import Control.Monad
 import Control.Monad.State
 import Data.Time.Clock
 import Data.Fixed
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Double.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Double.hs
index 8b8ed73..cc66cb7 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Double.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Double.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms, MagicHash, UnboxedTuples, BangPatterns, Strict #-}
+{-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms, MagicHash, UnboxedTuples, BangPatterns, Strict, CPP #-}
 module Stg.Interpreter.PrimOp.Double where
 
 import GHC.Word
@@ -123,6 +123,11 @@ evalPrimOp fallback op args t tc = case (op, args) of
   ( "decodeDouble_Int64#", [DoubleV (D# x)]) -> do
     -- NOTE: map back to GHC primop
     let !(# a, b #) = decodeDouble_Int64# x
-    pure [Int64V (I# a), IntV (I# b)]
+#if MIN_VERSION_base(4,18,0)
+    let a' = int64ToInt# a
+#else
+    let a' = a
+#endif
+    pure [Int64V (I# a'), IntV (I# b)]
 
   _ -> fallback op args t tc
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Exceptions.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Exceptions.hs
index 9b7cca8..b23e88c 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Exceptions.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/Exceptions.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms #-}
 module Stg.Interpreter.PrimOp.Exceptions where
 
+import Control.Monad (unless, when)
 import Control.Monad.State
 
 import Stg.Syntax
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/STM.hs b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/STM.hs
index 11f4bc2..ade6cfe 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/STM.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/PrimOp/STM.hs
@@ -2,6 +2,7 @@
 module Stg.Interpreter.PrimOp.STM where
 
 import GHC.Stack
+import Control.Monad (forM_, when)
 import Control.Monad.State
 import Data.IntMap (IntMap)
 import qualified Data.IntMap as IntMap
@@ -44,7 +45,7 @@ TODO:
   - read paper from 6.1 transaction logs
 
 Q: is there a new tlog entry for each tvar operation or is it one entry per tvar?
-A: 
+A:
 
 Q: what is the difference between STM and SQL transactions?
     is it the value sampling?
@@ -500,4 +501,4 @@ primop  WriteTVarOp "writeTVar#" GenPrimOp
 
 primop  SameTVarOp "sameTVar#" GenPrimOp
    TVar# s a -> TVar# s a -> Int#
--}
\ No newline at end of file
+-}
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/Rts.hs b/external-stg-interpreter/lib/Stg/Interpreter/Rts.hs
index a9b2a41..a217c59 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/Rts.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/Rts.hs
@@ -2,6 +2,7 @@
 module Stg.Interpreter.Rts (initRtsSupport, extStgRtsSupportModule, globalStoreSymbols) where
 
 import GHC.Stack
+import Control.Monad (forM_)
 import Control.Monad.State
 import Control.Concurrent.MVar
 
diff --git a/external-stg-interpreter/lib/Stg/Interpreter/ThreadScheduler.hs b/external-stg-interpreter/lib/Stg/Interpreter/ThreadScheduler.hs
index e436b20..b16dc92 100644
--- a/external-stg-interpreter/lib/Stg/Interpreter/ThreadScheduler.hs
+++ b/external-stg-interpreter/lib/Stg/Interpreter/ThreadScheduler.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE RecordWildCards, LambdaCase, OverloadedStrings, PatternSynonyms #-}
 module Stg.Interpreter.ThreadScheduler where
 
+import Control.Monad (forM_, when)
 import Control.Monad.State
 import Data.IntMap (IntMap)
 import qualified Data.IntMap as IntMap
diff --git a/stack-ghc-9.6.yaml b/stack-ghc-9.6.yaml
new file mode 100644
index 0000000..6eb4be6
--- /dev/null
+++ b/stack-ghc-9.6.yaml
@@ -0,0 +1,18 @@
+resolver: nightly-2023-07-17
+
+packages:
+  - 'external-stg-syntax'
+  - 'external-stg'
+  - 'external-stg-interpreter'
+#  - 'lambda'
+#  - 'external-stg-compiler'
+
+extra-deps:
+  - github: luc-tielen/souffle-haskell
+    commit: bcd7e3c058c9036d8495cf114520663917b7ac81
+  - github: david-christiansen/final-pretty-printer
+    commit: 048e8fa2d8b2b7a6f9e4e209db4f67361321eec8
+  - inline-c-0.9.1.8@sha256:88ad57e7e08ecdfd18c2468019650aeb0a87da189ecb5891d6873e28162bc46f,3303
+  - ansi-wl-pprint-0.6.9 # See: https://github.com/fpco/inline-c/issues/144
+
+allow-newer: true