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 | None
Language | Haskell2010

Data.Generics.Sum.Typed

Contents

- Prisms

Description

Derive constructor-field-type-based prisms generically.

Synopsis

- class AsType a s where
  - _Typed :: Prism' s a
  - injectTyped :: a -> s
  - projectTyped :: s -> Maybe a

# Prisms

class AsType a s where Source #

Sums that have a constructor with a field of the given type.

Minimal complete definition

injectTyped, projectTyped | _Typed

Methods

_Typed :: Prism' s a Source #

A prism that projects a constructor uniquely identifiable by the type of its field. Compatible with the lens package's `Prism` type.

    >>> dog ^? _Typed @Dog
    Just (MkDog {name = "Shep", age = Age 3})
    >>> cat ^? _Typed @(Name, Age)
    Just ("Mog",Age 5)
    >>> dog ^? _Typed @Age
    ...
    ...
    ... The type Animal contains multiple constructors whose fields are of type Age.
    ... The choice of constructor is thus ambiguous, could be any of:
    ... Duck
    ... Turtle
    ...

injectTyped :: a -> s Source #

Inject by type.

projectTyped :: s -> Maybe a Source #

Project by type.

#### Instances

Instances details

AsType Void a Source #

Uncluttering type signatures (see `Void`)

    >>> :t +d _Typed @Int
    _Typed @Int
      :: (AsType Int s, Choice p, Applicative f) =>
         p Int (f Int) -> p s (f s)

Instance details Defined in Data.Generics.Sum.Typed Methods _Typed :: Prism' a Void Source # injectTyped :: Void -> a Source # projectTyped :: a -> Maybe Void Source #

AsType a Void Source #

Uncluttering type signatures (see `Void`)

    >>> :t +d _Typed
    _Typed
      :: (AsType a s, Choice p, Applicative f) => p a (f a) -> p s (f s)

Instance details Defined in Data.Generics.Sum.Typed Methods _Typed :: Prism' Void a Source # injectTyped :: a -> Void Source # projectTyped :: Void -> Maybe a Source #
Context a s => AsType a s Source # |
Instance details Defined in Data.Generics.Sum.Typed Methods _Typed :: Prism' s a Source # injectTyped :: a -> s Source # projectTyped :: s -> Maybe a Source #