diff --git a/ghcprofview.cabal b/ghcprofview.cabal
--- a/ghcprofview.cabal
+++ b/ghcprofview.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 1af11545e3da13219f5e775588be3ada381d8abd4cee98035bc3d0891a341388
+-- hash: 4b0ac2e3a7a39025f611df924cc5a484d6252971530914ef195dbb85ffc42a2b
 
 name:           ghcprofview
-version:        0.1.0.1
+version:        0.1.0.2
 synopsis:       GHC .prof files viewer
 description:    Please see the README on GitHub at <https://github.com/portnov/ghcprofview-hs#readme>
 category:       Development
@@ -48,7 +48,7 @@
     , base >=4.7 && <5
     , containers
     , ghc-prof
-    , gi-gtk
+    , gi-gtk <4
     , haskell-gi-base
     , mtl >=2.2
     , regex-tdfa
diff --git a/src/Types.hs b/src/Types.hs
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE TypeApplications #-}
 
 module Types where
 
@@ -33,23 +34,26 @@
   show (AggregatedId set) = show set
 
 instance IsGValue Int where
-  toGValue x = toGValue (fromIntegral x :: Int64)
-  fromGValue v = fromIntegral `fmap` (fromGValue v :: IO Int64)
+  gvalueGType_ = gvalueGType_ @Int64
+  gvalueSet_ ptr v = gvalueSet_ ptr (fromIntegral v :: Int64)
+  gvalueGet_ v = fromIntegral `fmap` (gvalueGet_ v :: IO Int64)
 
 instance IsGValue Integer where
-  toGValue x = toGValue (fromIntegral x :: Int64)
-  fromGValue v = fromIntegral `fmap` (fromGValue v :: IO Int64)
+  gvalueGType_ = gvalueGType_ @Int64
+  gvalueSet_ ptr v = gvalueSet_ ptr (fromIntegral v :: Int64)
+  gvalueGet_ v = fromIntegral `fmap` (gvalueGet_ v :: IO Int64)
 
 instance IsGValue Scientific where
-  toGValue x = toGValue (toRealFloat x :: Double)
-  fromGValue v = fromFloatDigits `fmap` (fromGValue v :: IO Double)
+  gvalueGType_ = gvalueGType_ @Double
+  gvalueSet_ ptr v = gvalueSet_ ptr (toRealFloat v :: Double)
+  gvalueGet_ v = fromFloatDigits `fmap` (gvalueGet_ v :: IO Double)
 
 data CostCentreData = CostCentreData {
-    ccdProfile :: ! Profile
+    ccdProfile :: !Profile
   , ccdParent :: Maybe CostCentreData
-  , ccdRecords :: ! [ProfileRecord Individual]
-  , ccdCostCentre :: ! CostCentre
-  , ccdChildren :: ! [CostCentreData]
+  , ccdRecords :: ![ProfileRecord Individual]
+  , ccdCostCentre :: !CostCentre
+  , ccdChildren :: ![CostCentreData]
   }
   deriving (Show)
 
@@ -58,23 +62,23 @@
   treeChildren = ccdChildren
 
 data CostCentre = CostCentre {
-    ccLabel :: ! T.Text
-  , ccId :: ! Id
-  , ccModule :: ! T.Text
-  , ccSource :: ! T.Text
-  , ccIsCaf :: ! Bool
+    ccLabel :: !T.Text
+  , ccId :: !Id
+  , ccModule :: !T.Text
+  , ccSource :: !T.Text
+  , ccIsCaf :: !Bool
   }
   deriving (Eq, Show)
 
 data ProfileRecord s = ProfileRecord {
-    prCcId :: ! (RecordId s)
-  , prEntries :: ! Integer
-  , prTicks :: ! (Maybe Integer)             -- ^ If present in input file
-  , prAlloc :: ! (Maybe Integer)             -- ^ If present in input file
-  , prTimeIndividual :: ! (Maybe Double) -- ^ If present in input file
-  , prAllocIndividual :: ! (Maybe Double) -- ^ If present in input file
-  , prTimeInherited :: ! (Maybe Double) -- ^ If present in input file
-  , prAllocInherited :: ! (Maybe Double) -- ^ If present in input file
+    prCcId :: !(RecordId s)
+  , prEntries :: !Integer
+  , prTicks :: !(Maybe Integer)             -- ^ If present in input file
+  , prAlloc :: !(Maybe Integer)             -- ^ If present in input file
+  , prTimeIndividual :: !(Maybe Double) -- ^ If present in input file
+  , prAllocIndividual :: !(Maybe Double) -- ^ If present in input file
+  , prTimeInherited :: !(Maybe Double) -- ^ If present in input file
+  , prAllocInherited :: !(Maybe Double) -- ^ If present in input file
   }
   deriving (Show)
 
@@ -86,13 +90,13 @@
 listRecordId (ProfileRecord {prCcId = AggregatedId set}) = IS.toList set
 
 data Profile = Profile {
-    profileProgram :: ! T.Text
-  , profileTotalTime :: ! Double
-  , profileRtsArguments :: ! [T.Text]
-  , profileInitCaps :: ! Int32
-  , profileTickInterval :: ! Int32
-  , profileTotalAlloc :: ! Integer
-  , profileTotalTicks :: ! Integer
+    profileProgram :: !T.Text
+  , profileTotalTime :: !Double
+  , profileRtsArguments :: ![T.Text]
+  , profileInitCaps :: !Int32
+  , profileTickInterval :: !Int32
+  , profileTotalAlloc :: !Integer
+  , profileTotalTicks :: !Integer
   , profileTree :: Tree (ProfileRecord Individual)
   , profileTreeMap :: IM.IntMap (Tree (ProfileRecord Individual))
   , profileCostCentres :: IM.IntMap CostCentre
