@@ -1,11 +1,9 @@
1{-# LANGUAGE AllowAmbiguousTypes #-}
1{-# LANGUAGE AllowAmbiguousTypes #-}
2{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE FlexibleInstances #-}
4−{-# LANGUAGE FunctionalDependencies #-}
5{-# LANGUAGE PolyKinds #-}
4{-# LANGUAGE PolyKinds #-}
6{-# LANGUAGE Rank2Types #-}
5{-# LANGUAGE Rank2Types #-}
7{-# LANGUAGE ScopedTypeVariables #-}
6{-# LANGUAGE ScopedTypeVariables #-}
8−{-# LANGUAGE TypeApplications #-}
9{-# LANGUAGE TypeFamilies #-}
7{-# LANGUAGE TypeFamilies #-}
10{-# LANGUAGE TypeOperators #-}
8{-# LANGUAGE TypeOperators #-}
11{-# LANGUAGE UndecidableInstances #-}
9{-# LANGUAGE UndecidableInstances #-}
@@ -38,6 +36,8 @@ type family Contains (field :: Symbol) f :: Maybe Type where
39 Contains field (f :*: g)
37 Contains field (f :*: g)
40 = Contains field f <|> Contains field g
38 = Contains field f <|> Contains field g
39+ Contains field (f :+: g)
40+ = Contains field f <&> Contains field g
41 Contains field (S1 _ _)
41 Contains field (S1 _ _)
42 = 'Nothing
42 = 'Nothing
43 Contains field (C1 m f)
43 Contains field (C1 m f)
@@ -57,3 +57,7 @@ type family (a :: Maybe k) <|> (b :: Maybe k) :: Maybe k where
57 'Just x <|> _ = 'Just x
57 'Just x <|> _ = 'Just x
58 _ <|> b = b
58 _ <|> b = b
60+type family (a :: Maybe k) <&> (b :: Maybe k) :: Maybe k where
61+ 'Just x <&> 'Just x = 'Just x