diff --git a/derive-has-field.cabal b/derive-has-field.cabal
--- a/derive-has-field.cabal
+++ b/derive-has-field.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           derive-has-field
-version:        0.1.1.0
+version:        0.1.2.0
 synopsis:       Derive HasField instances with Template Haskell
 description:    A Template Haskell function to derive HasField instances to utilize OverloadedRecordDot more effectively.
 category:       Template Haskell
diff --git a/src/DeriveHasField.hs b/src/DeriveHasField.hs
--- a/src/DeriveHasField.hs
+++ b/src/DeriveHasField.hs
@@ -81,14 +81,15 @@
   when (datatypeInfo.datatypeVariant `Foldable.notElem` [Datatype, Newtype]) $
     fail "deriveHasField: only supports data and newtype"
 
-  -- We only support data types with field names and concrete types
-  let isConcreteType = \case
+  -- We only support data types with concrete types or plain polymorphic variables
+  let isSupportedType = \case
         ConT _ -> True
         AppT _ _ -> True
+        VarT _ -> True
         _ -> False
   recordConstructorNames <- getRecordConstructorFieldNames constructorInfo
-  unless (Foldable.all isConcreteType constructorInfo.constructorFields) $
-    fail "deriveHasField: only supports concrete field types"
+  forM_ (Foldable.find (not . isSupportedType) constructorInfo.constructorFields) $ \unsupportedType ->
+    fail $ "deriveHasField: only supports simple field types, but " <> pprint unsupportedType <> " is not"
 
   -- Build the instances
   let constructorNamesAndTypes :: [(Name, Type)]
diff --git a/test/DeriveHasFieldSpec.hs b/test/DeriveHasFieldSpec.hs
--- a/test/DeriveHasFieldSpec.hs
+++ b/test/DeriveHasFieldSpec.hs
@@ -48,8 +48,9 @@
     }
 
 data OtherType a b = OtherType
-  { otherTypeField :: Maybe a
-  , otherTypeOtherField :: Either a b
+  { otherTypeField :: a
+  , otherTypeMaybeField :: Maybe a
+  , otherTypeEitherField :: Either a b
   }
 
 DeriveHasField.deriveHasField ''OtherType
@@ -57,8 +58,9 @@
 otherType :: OtherType Int String
 otherType =
   OtherType
-    { otherTypeField = Just 0
-    , otherTypeOtherField = Right "hello"
+    { otherTypeField = 0
+    , otherTypeMaybeField = Just 0
+    , otherTypeEitherField = Right "hello"
     }
 
 data OtherTypePrefix a b = OtherTypePrefix
@@ -126,8 +128,9 @@
       someType.someMaybeField `shouldBe` Just 0
       someType.someEitherField `shouldBe` Right 0
     it "compiles and gets the right field" $ do
-      otherType.field `shouldBe` Just 0
-      otherType.otherField `shouldBe` Right "hello"
+      otherType.field `shouldBe` 0
+      otherType.maybeField `shouldBe` Just 0
+      otherType.eitherField `shouldBe` Right "hello"
     it "compiles and gets the right field" $ do
       kindedType.withKind `shouldBe` Just ()
       kindedType.withSymbol `shouldBe` Proxy @"hello"
