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 |
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.
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
AsType a Void Source # | See Note [Uncluttering type signatures] >>> :t _Typed _Typed :: (AsType a s, Choice p, Applicative f) => p a (f a) -> p s (f s) |
Defined in Data.Generics.Sum.Typed | |
Context a s => AsType a s Source # | |
Defined in Data.Generics.Sum.Typed | |
AsType Void a Source # | See Note [Uncluttering type signatures]
>>> :t _Typed |
Defined in Data.Generics.Sum.Typed |