generic-lens-2.2.2.0: Generically derive traversals, lenses and prisms.

Copyright | (C) 2020 Csongor Kiss
License | BSD3
Maintainer | Csongor Kiss <kiss.csongor.kiss@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | Safe-Inferred
Language | Haskell2010

Data.Generics.Sum.Constructors

Contents

- Prisms

Description

Derive constructor-name-based prisms generically.

Synopsis

- class AsConstructor (ctor :: Symbol) s t a b | ctor s -> a, ctor t -> b where
  - _Ctor :: Prism s t a b
- class AsConstructor_ (ctor :: Symbol) s t a b where
  - _Ctor_ :: Prism s t a b
- class AsConstructor' (ctor :: Symbol) s a | ctor s -> a where
  - _Ctor' :: Prism s s a a
- class AsConstructor0 (ctor :: Symbol) s t a b where
  - _Ctor0 :: Prism s t a b

# Prisms

## Running example:

    >>> :set -XTypeApplications
    >>> :set -XDataKinds
    >>> :set -XDeriveGeneric
    >>> :set -XFlexibleContexts
    >>> :set -XTypeFamilies
    >>> import GHC.Generics
    >>> import Control.Lens
    >>> :m +Data.Generics.Product.Fields
    >>> :m +Data.Function
    >>> :{
    data Animal a
      = Dog (Dog a)
      | Cat Name Age
      | Duck Age
      deriving (Generic, Show)
    data Dog a
      = MkDog
      { name   :: Name
      , age    :: Age
      , fieldA :: a
      }
      deriving Show
    type Name = String
    type Age  = Int
    dog, cat, duck :: Animal Int
    dog = Dog (MkDog "Shep" 3 30)
    cat = Cat "Mog" 5
    duck = Duck 2
    :}

class AsConstructor (ctor :: Symbol) s t a b | ctor s -> a, ctor t -> b where Source #

Sums that have a constructor with a given name.

Methods

_Ctor :: Prism s t a b Source #

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, fieldA = 30})

    >>> dog ^? _Ctor @"Cat"
    Nothing

    >>> cat ^? _Ctor @"Cat"
    Just ("Mog",5)

    >>> _Ctor @"Cat" # ("Garfield", 6) :: Animal Int
    Cat "Garfield" 6

### Type errors

    >>> cat ^? _Ctor @"Turtle"
    ...
    ...
    ... The type Animal Int does not contain a constructor named "Turtle"
    ...

#### Instances

Instances details

(Context ctor s t a b, AsConstructor0 ctor s t a b) => AsConstructor ctor s t a b Source # |
Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor :: Prism s t a b Source #

AsConstructor ctor (Void1 a) (Void1 b) a b Source #

Uncluttering type signatures (see `Void`)

    >>> :t +d _Ctor
    _Ctor
      :: (AsConstructor ctor s t a b, Choice p, Applicative f) =>
         p a (f b) -> p s (f t)

Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor :: Prism (Void1 a) (Void1 b) a b Source #

class AsConstructor_ (ctor :: Symbol) s t a b where Source #

Sums that have a constructor with a given name.

The difference between `HasConstructor` and `HasConstructor_` is similar to the one between `HasField` and `HasField_`. See `HasField_`.

Methods

_Ctor_ :: Prism s t a b Source #

#### Instances

Instances details

(Context_ ctor s t a b, AsConstructor0 ctor s t a b) => AsConstructor_ ctor s t a b Source # |
Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor_ :: Prism s t a b Source #
AsConstructor_ ctor (Void1 a) (Void1 b) a b Source # |
Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor_ :: Prism (Void1 a) (Void1 b) a b Source #

class AsConstructor' (ctor :: Symbol) s a | ctor s -> a where Source #

Methods

_Ctor' :: Prism s s a a Source #

#### Instances

Instances details

(Context' ctor s a, AsConstructor0 ctor s s a a) => AsConstructor' ctor s a Source # |
Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor' :: Prism s s a a Source #

class AsConstructor0 (ctor :: Symbol) s t a b where Source #

Sums that have a constructor with a given name.

This class gives the minimal constraints needed to define this prism. For common uses, see `HasConstructor`.

Methods

_Ctor0 :: Prism s t a b Source #

#### Instances

Instances details

Context0 ctor s t a b => AsConstructor0 ctor s t a b Source # |
Instance details Defined in Data.Generics.Sum.Constructors Methods _Ctor0 :: Prism s t a b Source #