| Copyright | (C) 2017 Csongor Kiss | 
|---|---|
| License | BSD3 | 
| Maintainer | Csongor Kiss <kiss.csongor.kiss@gmail.com> | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | Safe | 
| Language | Haskell2010 | 
Data.Generics.Sum
Contents
Description
Magic sum operations using Generics
These classes need not be instantiated manually, as GHC can automatically
 prove valid instances via Generics. Only the Generic class needs to
 be derived (see examples).
- class AsAny sel a s | s sel k -> a where
- class AsConstructor ctor a s | s ctor -> a where
- class AsSubtype sub sup where
- class AsType a s where
Prisms
class AsAny sel a s | s sel k -> a where Source #
Sums that have generic prisms.
Methods
A prism that projects a sum as identified by some selector. Currently
  supported selectors are constructor names and unique types. Compatible
  with the lens package's Prism type.
>>>dog ^? _As @"Dog"Just (MkDog {name = "Shep", age = 3})>>>dog ^? _As @DogJust (MkDog {name = "Shep", age = 3})>>>dog ^? _As @"Cat"Nothing>>>cat ^? _As @(Name, Age)Just ("Mog",5)>>>cat ^? _As @"Cat"Just ("Mog",5)>>>_As @"Cat" # ("Garfield", 6) :: AnimalCat ("Garfield",6)>>>duck ^? _As @AgeJust 2
class AsConstructor ctor a s | s ctor -> a where Source #
Sums that have a constructor with a given name.
Methods
A prism that projects a named constructor from a sum. Compatible with the
  lens package's Prism type.
>>>dog ^? _Ctor @"Dog"Just (MkDog {name = "Shep", age = 3})
>>>dog ^? _Ctor @"Cat"Nothing
>>>cat ^? _Ctor @"Cat"Just ("Mog", 5)
>>>_Ctor @"Cat" # ("Garfield", 6) :: AnimalCat ("Garfield", 6)
class AsSubtype sub sup where Source #
Structural subtyping between sums. A sum Sub is a subtype of another sum
  Sup if a value of Sub can be given (modulo naming of constructors)
  whenever a value of Sup is expected. In the running example for instance,
  FourLeggedAnimal is a subtype of Animal since a value of the former can
  be given as a value of the latter (renaming Dog4 to Dog and Cat4 to
  Cat).
Minimal complete definition
Methods
_Sub :: Prism' sup sub Source #
A prism that captures structural subtyping. Allows a substructure to be injected (upcast) into a superstructure or a superstructure to be downcast into a substructure (which may fail).
>>>_Sub # dog4 :: AnimalDog (MkDog {name = "Snowy", age = 4})>>>cat ^? _Sub :: Maybe FourLeggedAnimalJust (Cat4 "Mog" 5)>>>duck ^? _Sub :: Maybe FourLeggedAnimalNothing
injectSub :: sub -> sup Source #
Injects a subtype into a supertype (upcast).
projectSub :: sup -> Either sup sub Source #
Projects a subtype from a supertype (downcast).
class AsType a s where Source #
Sums that have a constructor with a field of the given type.
Minimal complete definition
Methods
A prism that projects a constructor uniquely identifiable by the type of
  its field. Compatible with the lens package's Prism type.
>>>dog ^? _Typed @DogJust (MkDog {name = "Shep", age = 3})>>>dog ^? _Typed @AgeNothing>>>cat ^? _Typed @(Name, Age)Just ("Mog",5)>>>duck ^? _Typed @AgeJust 2
injectTyped :: a -> s Source #
Inject by type.
projectTyped :: s -> Maybe a Source #
Project by type.