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