diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for libfuse3
 
+## 0.2.0.1 -- 2023-03-26
+
+* Fixed the example to compile with `unix-2.8`.
+* Added support for `base-4.18` (ghc-9.6).
+* Dropped support for `base-4.14.2` and older.
+
 ## 0.2.0.0 -- 2022-09-10
 
 ### Breaking changes
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Haskell libfuse3 package 0.2.0.0.
+# Generated by GNU Autoconf 2.71 for Haskell libfuse3 package 0.2.0.1.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -607,8 +607,8 @@
 # Identity of this package.
 PACKAGE_NAME='Haskell libfuse3 package'
 PACKAGE_TARNAME='haskell-libfuse3-package'
-PACKAGE_VERSION='0.2.0.0'
-PACKAGE_STRING='Haskell libfuse3 package 0.2.0.0'
+PACKAGE_VERSION='0.2.0.1'
+PACKAGE_STRING='Haskell libfuse3 package 0.2.0.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1232,7 +1232,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Haskell libfuse3 package 0.2.0.0 to adapt to many kinds of systems.
+\`configure' configures Haskell libfuse3 package 0.2.0.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1295,7 +1295,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Haskell libfuse3 package 0.2.0.0:";;
+     short | recursive ) echo "Configuration of Haskell libfuse3 package 0.2.0.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1383,7 +1383,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Haskell libfuse3 package configure 0.2.0.0
+Haskell libfuse3 package configure 0.2.0.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1519,7 +1519,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Haskell libfuse3 package $as_me 0.2.0.0, which was
+It was created by Haskell libfuse3 package $as_me 0.2.0.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3916,7 +3916,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Haskell libfuse3 package $as_me 0.2.0.0, which was
+This file was extended by Haskell libfuse3 package $as_me 0.2.0.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -3980,7 +3980,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-Haskell libfuse3 package config.status 0.2.0.0
+Haskell libfuse3 package config.status 0.2.0.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([Haskell libfuse3 package], [0.2.0.0])
+AC_INIT([Haskell libfuse3 package], [0.2.0.1])
 
 # Safety check: Ensure that we are in the correct source directory.
 AC_CONFIG_SRCDIR([libfuse3.cabal])
diff --git a/example/passthrough.hs b/example/passthrough.hs
--- a/example/passthrough.hs
+++ b/example/passthrough.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -- |
 -- Copyright : (The original C)   2001-2007  Miklos Szeredi <miklos@szeredi.hu>
 --                                2011       Sebastian Pipping <sebastian@pipping.org>
@@ -31,6 +32,17 @@
 import qualified System.LibFuse3.FuseConfig as FuseConfig
 import qualified XAttr
 
+#if MIN_VERSION_unix(2,8,0)
+import System.Posix.IO (creat)
+#endif
+
+openFdCompat :: FilePath -> OpenMode -> Maybe FileMode -> OpenFileFlags -> IO Fd
+#if MIN_VERSION_unix(2,8,0)
+openFdCompat path openMode mfileMode openFileFlags = openFd path openMode (openFileFlags{creat = mfileMode})
+#else
+openFdCompat = openFd
+#endif
+
 foreign import ccall "posix_fallocate"
   c_posix_fallocate :: CInt -> COff -> COff -> IO CInt
 
@@ -73,7 +85,7 @@
 
 xmpMknod :: FilePath -> FileMode -> DeviceID -> IO Errno
 xmpMknod path mode rdev = tryErrno_ $ case fileModeToEntryType mode of
-  RegularFile -> bracket (openFd path WriteOnly (Just mode) (defaultFileFlags{exclusive=True})) closeFd (\_ -> pure ())
+  RegularFile -> bracket (openFdCompat path WriteOnly (Just mode) (defaultFileFlags{exclusive=True})) closeFd (\_ -> pure ())
   Directory -> createDirectory path mode
   NamedPipe -> createNamedPipe path mode
   _ -> createDevice path mode rdev
@@ -111,10 +123,10 @@
 xmpUtimens path atime mtime = tryErrno_ $ setSymbolicLinkTimesHiRes path atime mtime
 
 xmpCreate :: FilePath -> OpenMode -> FileMode -> OpenFileFlags -> IO (Either Errno Fd)
-xmpCreate path omode fmode flags = tryErrno $ openFd path omode (Just fmode) flags
+xmpCreate path omode fmode flags = tryErrno $ openFdCompat path omode (Just fmode) flags
 
 xmpOpen :: FilePath -> OpenMode -> OpenFileFlags -> IO (Either Errno Fd)
-xmpOpen path mode flags = tryErrno $ openFd path mode Nothing flags
+xmpOpen path mode flags = tryErrno $ openFdCompat path mode Nothing flags
 
 xmpRead :: Fd -> ByteCount -> FileOffset -> IO (Either Errno ByteString)
 xmpRead fd size offset = tryErrno $ pread fd size offset
diff --git a/example/statjson.hs b/example/statjson.hs
--- a/example/statjson.hs
+++ b/example/statjson.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DisambiguateRecordFields #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE NamedFieldPuns #-}
@@ -56,12 +57,23 @@
 import System.IO (hPrint, stderr)
 import System.Posix.IO (OpenFileFlags, OpenMode(ReadOnly), closeFd, openFd)
 import System.Posix.Files (regularFileMode, stdFileMode)
-import System.Posix.Types (ByteCount, Fd, FileOffset)
+import System.Posix.Types (ByteCount, Fd, FileMode, FileOffset)
 
 import qualified Data.Aeson as Aeson
 import qualified Data.ByteString.Lazy as BL
 import qualified System.Clock
 
+#if MIN_VERSION_unix(2,8,0)
+import System.Posix.IO (creat)
+#endif
+
+openFdCompat :: FilePath -> OpenMode -> Maybe FileMode -> OpenFileFlags -> IO Fd
+#if MIN_VERSION_unix(2,8,0)
+openFdCompat path openMode mfileMode openFileFlags = openFd path openMode (openFileFlags{creat = mfileMode})
+#else
+openFdCompat = openFd
+#endif
+
 -- | An outcome of an individual operation in a layer.
 data Outcome a
   -- | The request is forwarded to the next layer.
@@ -100,7 +112,7 @@
       pure $ map (\entry -> (entry, Nothing)) entries
   , layerOpen = \path mode flags ->
       case mode of
-        ReadOnly -> tryErrno $ fmap Respond $ openFd (srcDir <> path) mode Nothing flags
+        ReadOnly -> tryErrno $ fmap Respond $ openFdCompat (srcDir <> path) mode Nothing flags
         _ -> pure $ Left eOPNOTSUPP
   , layerRead = \fd size offset -> tryErrno $ pread fd size offset
   , layerRelease = closeFd
diff --git a/libfuse3.cabal b/libfuse3.cabal
--- a/libfuse3.cabal
+++ b/libfuse3.cabal
@@ -3,7 +3,7 @@
 -- For further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                libfuse3
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            A Haskell binding for libfuse-3.x
 description:         Bindings for libfuse, the FUSE userspace reference implementation, of version 3.x. Compatible with Linux.
 -- bug-reports:
@@ -41,10 +41,10 @@
                        System.LibFuse3.Utils
   -- other-modules:
   -- other-extensions:
-  build-depends:       base >=4.11 && <4.18
+  build-depends:       base >=4.14.3 && <4.19
                      , bytestring >=0.10.8 && <0.12
                      , clock ==0.8.*
-                     , resourcet ==1.2.*
+                     , resourcet >=1.2 && <1.4
                      , time >=1.6 && <1.14
                      , unix >=2.7 && <2.9
   pkgconfig-depends:   fuse3
