Index: b/test/TH/Include.hs
===================================================================
--- /dev/null
+++ b/test/TH/Include.hs
@@ -0,0 +1,46 @@
+-- This template expects CPP definitions for:
+--     PLATFORM_NAME = Posix | Windows
+
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -Wno-unused-top-binds #-}
+
+-- | Test functions to check the template haskell bits.
+module TH.PLATFORM_NAME where
+
+import qualified Language.Haskell.TH.Syntax as TH
+
+import Path.Internal.PLATFORM_NAME
+import Path.PLATFORM_NAME
+
+-- | This is a helper type class that checks that splices produce a 'Path' with
+--   all type variables instantiated to a type.
+--   This ensures that bugs like https://github.com/commercialhaskell/path/issues/159
+--   cannot happen.
+class CheckInstantiated a b where
+    checkInstantiated :: Path a b -> FilePath
+    checkInstantiated = toFilePath
+
+instance CheckInstantiated Abs Dir
+instance CheckInstantiated Abs File
+instance CheckInstantiated Rel Dir
+instance CheckInstantiated Rel File
+
+qqRelDir :: FilePath
+qqRelDir = checkInstantiated [reldir|name/|]
+
+qqRelFile :: FilePath
+qqRelFile = checkInstantiated [relfile|name|]
+
+thRelDir :: FilePath
+thRelDir = checkInstantiated $(mkRelDir "name/")
+
+thRelFile :: FilePath
+thRelFile = checkInstantiated $(mkRelFile "name")
+
+liftRelDir :: FilePath
+liftRelDir = checkInstantiated $(TH.lift (Path "name/" :: Path Rel Dir))
+
+liftRelFile :: FilePath
+liftRelFile = checkInstantiated $(TH.lift (Path "name" :: Path Rel File))
Index: b/test-ospath/TH/Include.hs
===================================================================
--- /dev/null
+++ b/test-ospath/TH/Include.hs
@@ -0,0 +1,50 @@
+-- This template expects CPP definitions for:
+--     PLATFORM_NAME = Posix | Windows
+--     PLATFORM_PATH = PosixPath | WindowsPath
+
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+{-# OPTIONS_GHC -Wno-unused-top-binds #-}
+
+-- | Test functions to check the template haskell bits.
+module TH.PLATFORM_NAME where
+
+import qualified Language.Haskell.TH.Syntax as TH
+import System.OsPath.PLATFORM_NAME (PLATFORM_PATH)
+
+import OsPath.Internal.PLATFORM_NAME
+import OsPath.PLATFORM_NAME
+import qualified System.OsString.Compat.PLATFORM_NAME as OsString
+
+-- | This is a helper type class that checks that splices produce a 'Path' with
+--   all type variables instantiated to a type.
+--   This ensures that bugs like https://github.com/commercialhaskell/path/issues/159
+--   cannot happen.
+class CheckInstantiated a b where
+    checkInstantiated :: Path a b -> PLATFORM_PATH
+    checkInstantiated = toOsPath
+
+instance CheckInstantiated Abs Dir
+instance CheckInstantiated Abs File
+instance CheckInstantiated Rel Dir
+instance CheckInstantiated Rel File
+
+qqRelDir :: PLATFORM_PATH
+qqRelDir = checkInstantiated [reldir|name/|]
+
+qqRelFile :: PLATFORM_PATH
+qqRelFile = checkInstantiated [relfile|name|]
+
+thRelDir :: PLATFORM_PATH
+thRelDir = checkInstantiated $(mkRelDir [OsString.pstr|name/|])
+
+thRelFile :: PLATFORM_PATH
+thRelFile = checkInstantiated $(mkRelFile [OsString.pstr|name|])
+
+liftRelDir :: PLATFORM_PATH
+liftRelDir = checkInstantiated $(TH.lift (Path [OsString.pstr|name/|] :: Path Rel Dir))
+
+liftRelFile :: PLATFORM_PATH
+liftRelFile = checkInstantiated $(TH.lift (Path [OsString.pstr|name|] :: Path Rel File))
