generic-lens-2.2.1.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

Description

Derive constructor-field-type-based prisms generically.

Synopsis

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 a Void Source #

See Note [Uncluttering type signatures] >>> :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

Context a s => AsType a s Source #
Instance details

Defined in Data.Generics.Sum.Typed

AsType Void a Source #

See Note [Uncluttering type signatures] >>> :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