@@ -1,11 +1,9 @@
11{-# LANGUAGE AllowAmbiguousTypes #-}
22{-# LANGUAGE DataKinds #-}
33{-# LANGUAGE FlexibleInstances #-}
4−{-# LANGUAGE FunctionalDependencies #-}
54{-# LANGUAGE PolyKinds #-}
65{-# LANGUAGE Rank2Types #-}
76{-# LANGUAGE ScopedTypeVariables #-}
8−{-# LANGUAGE TypeApplications #-}
97{-# LANGUAGE TypeFamilies #-}
108{-# LANGUAGE TypeOperators #-}
119{-# LANGUAGE UndecidableInstances #-}
@@ -38,6 +36,8 @@ type family Contains (field :: Symbol) f :: Maybe Type where
3836 = 'Just t
3937 Contains field (f :*: g)
4038 = Contains field f <|> Contains field g
39+ Contains field (f :+: g)
40+ = Contains field f <&> Contains field g
4141 Contains field (S1 _ _)
4242 = 'Nothing
4343 Contains field (C1 m f)
@@ -57,3 +57,7 @@ type family (a :: Maybe k) <|> (b :: Maybe k) :: Maybe k where
5757 'Just x <|> _ = 'Just x
5858 _ <|> b = b
5959
60+type family (a :: Maybe k) <&> (b :: Maybe k) :: Maybe k where
61+ 'Just x <&> 'Just x = 'Just x
62+ _ <&> _ = 'Nothing
63+