@@ -1,11 +1,11 @@
1−{-# LANGUAGE AllowAmbiguousTypes #-}
2−{-# LANGUAGE DataKinds #-}
3−{-# LANGUAGE FlexibleInstances #-}
4−{-# LANGUAGE PolyKinds #-}
5−{-# LANGUAGE Rank2Types #-}
6−{-# LANGUAGE ScopedTypeVariables #-}
7−{-# LANGUAGE TypeFamilies #-}
8−{-# LANGUAGE TypeOperators #-}
1+{-# LANGUAGE AllowAmbiguousTypes #-}
2+{-# LANGUAGE DataKinds #-}
3+{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE PolyKinds #-}
5+{-# LANGUAGE Rank2Types #-}
6+{-# LANGUAGE ScopedTypeVariables #-}
7+{-# LANGUAGE TypeFamilies #-}
8+{-# LANGUAGE TypeOperators #-}
99{-# LANGUAGE UndecidableInstances #-}
1010
1111-----------------------------------------------------------------------------
@@ -21,43 +21,45 @@
2121--
2222-----------------------------------------------------------------------------
2323module Data.Generics.Record.Internal.Contains
24− ( Contains
24+ ( ContainsField
2525 ) where
2626
27−import Data.Kind (Type)
27+import Data.Kind (Type)
2828import GHC.Generics
29−
3029import GHC.TypeLits
3130
3231-- | Look up a record field by name in the generic representation, and return
3332-- its corresponding type, if exists.
34−type family Contains (field :: Symbol) f :: Maybe Type where
35− Contains field (S1 ('MetaSel ('Just field) _ _ _) (Rec0 t))
33+type family ContainsField (field :: Symbol) f :: Maybe Type where
34+ ContainsField field (S1 ('MetaSel ('Just field) _ _ _) (Rec0 t))
3635 = 'Just t
37− Contains field (f :*: g)
38− = Contains field f <|> Contains field g
39− Contains field (f :+: g)
40− = Contains field f <&> Contains field g
41− Contains field (S1 _ _)
36+ ContainsField field (f :*: g)
37+ = ContainsField field f <|> ContainsField field g
38+ ContainsField field (f :+: g)
39+ = ContainsField field f <&> ContainsField field g
40+ ContainsField field (S1 _ _)
4241 = 'Nothing
43− Contains field (C1 m f)
44− = Contains field f
45− Contains field (D1 m f)
46− = Contains field f
47− Contains field (Rec0 _)
42+ ContainsField field (C1 m f)
43+ = ContainsField field f
44+ ContainsField field (D1 m f)
45+ = ContainsField field f
46+ ContainsField field (Rec0 _)
4847 = 'Nothing
49− Contains field U1
48+ ContainsField field U1
5049 = 'Nothing
51− Contains field V1
50+ ContainsField field V1
5251 = 'Nothing
53− Contains x t = TypeError ('ShowType t)
52+ ContainsField x t
53+ = TypeError
54+ ( 'ShowType t
55+ ':<>: 'Text " is not a valid GHC.Generics representation type"
56+ )
5457
5558-- | Type-level alternative
5659type family (a :: Maybe k) <|> (b :: Maybe k) :: Maybe k where
57− 'Just x <|> _ = 'Just x
58− _ <|> b = b
60+ 'Just x <|> _ = 'Just x
61+ _ <|> b = b
5962
6063type family (a :: Maybe k) <&> (b :: Maybe k) :: Maybe k where
61− 'Just x <&> 'Just x = 'Just x
62− _ <&> _ = 'Nothing
63−
64+ 'Just x <&> 'Just x = 'Just x
65+ _ <&> _ = 'Nothing