diff --git a/System/Directory/Internal/Windows.hsc b/System/Directory/Internal/Windows.hsc
--- a/System/Directory/Internal/Windows.hsc
+++ b/System/Directory/Internal/Windows.hsc
@@ -12,7 +12,7 @@
 #include <shlobj.h>
 #include <windows.h>
 #include <System/Directory/Internal/utility.h>
-#include <System/Directory/Internal/windows.h>
+#include <System/Directory/Internal/windows_ext.h>
 import Prelude ()
 import System.Directory.Internal.Prelude
 import System.Directory.Internal.Common
diff --git a/System/Directory/Internal/windows.h b/System/Directory/Internal/windows.h
deleted file mode 100644
--- a/System/Directory/Internal/windows.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <windows.h>
-
-// define prototype to get size, offsets, and alignments
-// (can't include <ntifs.h> because that only exists in WDK)
-typedef struct {
-    ULONG ReparseTag;
-    USHORT ReparseDataLength;
-    USHORT Reserved;
-    union {
-        struct {
-            USHORT SubstituteNameOffset;
-            USHORT SubstituteNameLength;
-            USHORT PrintNameOffset;
-            USHORT PrintNameLength;
-            ULONG Flags;
-            WCHAR PathBuffer[1];
-        } SymbolicLinkReparseBuffer;
-        struct {
-            USHORT SubstituteNameOffset;
-            USHORT SubstituteNameLength;
-            USHORT PrintNameOffset;
-            USHORT PrintNameLength;
-            WCHAR PathBuffer[1];
-        } MountPointReparseBuffer;
-        struct {
-            UCHAR DataBuffer[1];
-        } GenericReparseBuffer;
-    };
-} HsDirectory_REPARSE_DATA_BUFFER;
diff --git a/System/Directory/Internal/windows_ext.h b/System/Directory/Internal/windows_ext.h
new file mode 100644
--- /dev/null
+++ b/System/Directory/Internal/windows_ext.h
@@ -0,0 +1,33 @@
+#ifndef HS_DIRECTORY_WINDOWS_EXT_H
+#define HS_DIRECTORY_WINDOWS_EXT_H
+#include <windows.h>
+
+// define prototype to get size, offsets, and alignments
+// (can't include <ntifs.h> because that only exists in WDK)
+typedef struct {
+    ULONG ReparseTag;
+    USHORT ReparseDataLength;
+    USHORT Reserved;
+    union {
+        struct {
+            USHORT SubstituteNameOffset;
+            USHORT SubstituteNameLength;
+            USHORT PrintNameOffset;
+            USHORT PrintNameLength;
+            ULONG Flags;
+            WCHAR PathBuffer[1];
+        } SymbolicLinkReparseBuffer;
+        struct {
+            USHORT SubstituteNameOffset;
+            USHORT SubstituteNameLength;
+            USHORT PrintNameOffset;
+            USHORT PrintNameLength;
+            WCHAR PathBuffer[1];
+        } MountPointReparseBuffer;
+        struct {
+            UCHAR DataBuffer[1];
+        } GenericReparseBuffer;
+    };
+} HsDirectory_REPARSE_DATA_BUFFER;
+
+#endif
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,9 +1,15 @@
 Changelog for the [`directory`][1] package
 ==========================================
 
+## 1.3.1.5 (October 2017)
+
+  * Rename the internal header `windows.h` to avoid GHC#14312.
+    ([#77](https://github.com/haskell/directory/issues/77))
+
 ## 1.3.1.4 (September 2017)
 
   * Fix `Win32` version 2.6 compatibility.
+    ([#75](https://github.com/haskell/directory/pull/75))
 
 ## 1.3.1.3 (September 2017)
 
@@ -12,6 +18,7 @@
 ## 1.3.1.2 (September 2017)
 
   * Relax `base` version bounds to support 4.11.
+    ([#74](https://github.com/haskell/directory/pull/74))
 
 ## 1.3.1.1 (March 2017)
 
diff --git a/directory.cabal b/directory.cabal
--- a/directory.cabal
+++ b/directory.cabal
@@ -1,5 +1,5 @@
 name:           directory
-version:        1.3.1.4
+version:        1.3.1.5
 -- NOTE: Don't forget to update ./changelog.md
 license:        BSD3
 license-file:   LICENSE
