diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## Zip 1.4.1
+
+* Fixed the build on Mac.
+
 ## Zip 1.4.0
 
 * The “version made by” info inside archive now correctly sets Unix as the
diff --git a/Codec/Archive/Zip/Unix.hs b/Codec/Archive/Zip/Unix.hs
--- a/Codec/Archive/Zip/Unix.hs
+++ b/Codec/Archive/Zip/Unix.hs
@@ -28,7 +28,7 @@
 -- @since 1.4.0
 
 toFileMode :: Word32 -> CMode
-toFileMode w = CMode $ (w `shiftR` 16) .&. 0x0fff
+toFileMode attrs = fromIntegral $ (attrs `shiftR` 16) .&. 0x0fff
 
 -- | Convert external attributes to the file info. The function assumes a
 -- regular file and keeps DOS attributes untouched.
@@ -39,4 +39,4 @@
 -- @since 1.4.0
 
 fromFileMode :: CMode -> Word32
-fromFileMode (CMode c) = (0o100000 .|. c) `shiftL` 16
+fromFileMode cmode = (0o100000 .|. fromIntegral cmode) `shiftL` 16
diff --git a/zip.cabal b/zip.cabal
--- a/zip.cabal
+++ b/zip.cabal
@@ -1,5 +1,5 @@
 name:                 zip
-version:              1.4.0
+version:              1.4.1
 cabal-version:        1.18
 tested-with:          GHC==8.4.4, GHC==8.6.5, GHC==8.8.3
 license:              BSD3
