From e96e51348ed284577520b085c0f63b79a5e5090b Mon Sep 17 00:00:00 2001 From: Jack Kelly Date: Thu, 13 Mar 2025 21:38:09 +1000 Subject: [PATCH] Add instances for (GHC.Generics.:+:) --- universe-some/src/Data/Universe/Some.hs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/universe-some/src/Data/Universe/Some.hs b/universe-some/src/Data/Universe/Some.hs index d1f4033..eb56034 100644 --- a/universe-some/src/Data/Universe/Some.hs +++ b/universe-some/src/Data/Universe/Some.hs @@ -1,4 +1,5 @@ {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeOperators #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE Safe #-} module Data.Universe.Some ( @@ -12,6 +13,7 @@ import Data.Some (Some, mapSome, mkSome, foldSome) import Data.Type.Equality ((:~:) (..)) import Data.Universe.Class (Universe (..), Finite (..)) import Data.Universe.Helpers (Tagged (..), Natural, (+++)) +import GHC.Generics ((:+:) (..)) import qualified Data.Some.GADT as G import qualified Data.Some.Newtype as N @@ -95,6 +97,12 @@ instance (UniverseSome f, UniverseSome g) => UniverseSome (Sum f g) where instance (FiniteSome f, FiniteSome g) => FiniteSome (Sum f g) where universeFSome = map (mapSome InL) universeFSome ++ map (mapSome InR) universeFSome +instance (UniverseSome f, UniverseSome g) => UniverseSome (f :+: g) where + universeSome = map (mapSome L1) universeSome +++ map (mapSome R1) universeSome + +instance (FiniteSome f, FiniteSome g) => FiniteSome (f :+: g) where + universeFSome = map (mapSome L1) universeFSome ++ map (mapSome R1) universeFSome + -- Note: Product instance is tricky, we could for special cases. -- e.g. '(GEq f, f ~ g) => UnvierseSome (Product f g)', but this is boring -- instance as we'd 'Pair' equal instances only.