| 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.Subtype
Contents
Description
Structural subtype relationships between sum types.
- class AsSubtype sub sup where
Prisms
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).