@@ -2,17 +2,13 @@
2{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE FlexibleContexts #-}
3{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE FlexibleInstances #-}
4{-# LANGUAGE FlexibleInstances #-}
5−{-# LANGUAGE FunctionalDependencies #-}
6{-# LANGUAGE KindSignatures #-}
5{-# LANGUAGE KindSignatures #-}
7{-# LANGUAGE MultiParamTypeClasses #-}
6{-# LANGUAGE MultiParamTypeClasses #-}
8{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
9−{-# LANGUAGE TypeApplications #-}
10{-# LANGUAGE TypeFamilies #-}
8{-# LANGUAGE TypeFamilies #-}
11{-# LANGUAGE TypeOperators #-}
9{-# LANGUAGE TypeOperators #-}
12{-# LANGUAGE UndecidableInstances #-}
10{-# LANGUAGE UndecidableInstances #-}
14−{-# LANGUAGE DeriveGeneric #-}
16-----------------------------------------------------------------------------
12-----------------------------------------------------------------------------
18-- Module : Data.Generics.Sum.Typed
14-- Module : Data.Generics.Sum.Typed
@@ -31,17 +27,14 @@ module Data.Generics.Sum.Typed
32 -- $example
28 -- $example
33 AsType (..)
29 AsType (..)
39import Data.Kind
32import Data.Kind
40import GHC.Generics
33import GHC.Generics
41import GHC.TypeLits (TypeError, ErrorMessage (..))
34import GHC.TypeLits (TypeError, ErrorMessage (..))
35+import Data.Generics.Sum.Internal.Typed
43import Data.Generics.Internal.Families
37import Data.Generics.Internal.Families
44−import Data.Generics.Internal.HList
45import Data.Generics.Internal.Lens
38import Data.Generics.Internal.Lens
47-- $example
40-- $example
@@ -116,56 +109,3 @@ type family ErrorUnlessOne (a :: Type) (s :: Type) (count :: Count) :: Constrain
117 ErrorUnlessOne _ _ 'One
110 ErrorUnlessOne _ _ 'One
120−-- |As 'AsType' but over generic representations as defined by "GHC.Generics".
121−class GAsType (f :: Type -> Type) a where
122− _GTyped :: Prism' (f x) a
123− _GTyped = prism ginjectTyped gprojectTyped
125− ginjectTyped :: a -> f x
126− gprojectTyped :: f x -> Either (f x) a
131− ) => GAsType (M1 C meta f) a where
134− = M1 . gfromCollection . tupleToList
136− = Right . listToTuple . gtoCollection . unM1
138−instance GSumAsType (HasPartialTypeTupleP a l) l r a => GAsType (l :+: r) a where
140− = ginjectSumTyped @(HasPartialTypeTupleP a l) @l @r @a
142− = gprojectSumTyped @(HasPartialTypeTupleP a l) @l @r @a
144−instance GAsType f a => GAsType (M1 D meta f) a where
148− = either (Left . M1) Right . gprojectTyped . unM1
150−class GSumAsType (contains :: Bool) l r a where
151− _GSumTyped :: Prism' ((l :+: r) x) a
152− _GSumTyped = prism (ginjectSumTyped @contains) (gprojectSumTyped @contains)
154− ginjectSumTyped :: a -> (l :+: r) x
155− gprojectSumTyped :: (l :+: r) x -> Either ((l :+: r) x) a
157−instance GAsType l a => GSumAsType 'True l r a where
162− L1 l -> either (Left . L1) Right (gprojectTyped l)
165−instance GAsType r a => GSumAsType 'False l r a where
170− R1 r -> either (Left . R1) Right (gprojectTyped r)