derive-has-field 0.0.1.2 → 0.0.1.3
raw patch · 3 files changed
+25/−6 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- derive-has-field.cabal +1/−1
- src/DeriveHasField.hs +1/−2
- test/DeriveHasFieldSpec.hs +23/−3
derive-has-field.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: derive-has-field-version: 0.0.1.2+version: 0.0.1.3 synopsis: Derive HasField instances with Template Haskell description: A Template Haskell function to derive HasField instances to utilize OverloadedRecordDot more effectively. category: Template Haskell
src/DeriveHasField.hs view
@@ -3,7 +3,6 @@ {-# LANGUAGE TemplateHaskell #-} module DeriveHasField (- module GHC.Records, deriveHasFieldWith, ) where@@ -59,7 +58,7 @@ else [d| instance HasField $litTFieldWanted $parentType $(pure ty) where- getField = $(appTypeE (varE $ mkName "getField") litTCurrentField)+ getField = $(appTypeE (varE 'getField) litTCurrentField) |] pure $ Foldable.concat decs
test/DeriveHasFieldSpec.hs view
@@ -1,10 +1,13 @@ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE TemplateHaskell #-} module DeriveHasFieldSpec where -import DeriveHasField+import Data.Data (Proxy (..))+import DeriveHasField qualified+import GHC.TypeLits (Symbol) import Import import Test.Hspec @@ -15,7 +18,7 @@ , someTypeSomeEitherField :: Either String Int } -deriveHasFieldWith (dropPrefix "someType") ''SomeType+DeriveHasField.deriveHasFieldWith (dropPrefix "someType") ''SomeType someType :: SomeType someType =@@ -31,7 +34,7 @@ , otherTypeOtherField :: Either a b } -deriveHasFieldWith (dropPrefix "otherType") ''OtherType+DeriveHasField.deriveHasFieldWith (dropPrefix "otherType") ''OtherType otherType :: OtherType Int String otherType =@@ -40,6 +43,20 @@ , otherTypeOtherField = Right "hello" } +data KindedType (kind :: * -> *) (sym :: Symbol) = KindedType+ { kindedTypeWithKind :: kind ()+ , kindedTypeWithSymbol :: Proxy sym+ }++DeriveHasField.deriveHasFieldWith (dropPrefix "kindedType") ''KindedType++kindedType :: KindedType Maybe "hello"+kindedType =+ KindedType+ { kindedTypeWithKind = Just ()+ , kindedTypeWithSymbol = Proxy @"hello"+ }+ spec :: Spec spec = do describe "deriveHasField" $ do@@ -51,3 +68,6 @@ it "compiles and gets the right field" $ do otherType.field `shouldBe` Just 0 otherType.otherField `shouldBe` Right "hello"+ it "compiles and gets the right field" $ do+ kindedType.withKind `shouldBe` Just ()+ kindedType.withSymbol `shouldBe` Proxy @"hello"