diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Revision history for dataframe
 
+## 0.3.3.9
+* Fix compilation issue for ghc 9.12.*
+
 ## 0.3.3.8
 * More efficient inner joins using hashmaps.
 * Initial JSON lines implementation
diff --git a/dataframe.cabal b/dataframe.cabal
--- a/dataframe.cabal
+++ b/dataframe.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               dataframe
-version:            0.3.3.8
+version:            0.3.3.9
 
 synopsis: A fast, safe, and intuitive DataFrame library.
 
diff --git a/src/DataFrame/IO/CSV.hs b/src/DataFrame/IO/CSV.hs
--- a/src/DataFrame/IO/CSV.hs
+++ b/src/DataFrame/IO/CSV.hs
@@ -287,6 +287,7 @@
     SpecifyTypes ts -> zipWithM initColumn row (expandTypes ts)
   where
     expandTypes xs = xs ++ replicate (length row - length xs) (schemaType @T.Text)
+    initColumn :: BL.ByteString -> SchemaType -> IO BuilderColumn
     initColumn _ t = do
         validityRef <- newPagedUnboxedVector
         case t of
@@ -316,12 +317,9 @@
                 Nothing -> appendPagedUnboxedVector gv 0.0 >> appendPagedUnboxedVector valid 0
             BuilderText gv valid -> do
                 let !val = T.strip (TE.decodeUtf8Lenient bs')
-                if isNull val
+                if isNullish val
                     then appendPagedVector gv T.empty >> appendPagedUnboxedVector valid 0
                     else appendPagedVector gv val >> appendPagedUnboxedVector valid 1
-
-isNull :: T.Text -> Bool
-isNull t = T.null t || t == "NA" || t == "NULL" || t == "null"
 
 freezeBuilderColumn :: BuilderColumn -> IO Column
 freezeBuilderColumn (BuilderInt gv validRef) = do
