Funx.Monoid.Optics.PrismCompose (funx v0.8.0)
View SourceThe Funx.Monoid.Optics.PrismCompose module provides a monoid wrapper for sequential prism composition.
This wrapper allows prisms to be used with generic monoid operations like m_concat/2 and m_append/3,
enabling functional composition of multiple prisms into a single partial focusing operation.
Wrapping and Unwrapping
new/1: Wraps a prism in aPrismComposemonoid.unwrap/1: Extracts the prism from aPrismComposewrapper.
Monoid Operations (via protocol)
empty/1: Returns the identity prism (accepts all values).append/2: Composes two prisms sequentially (outer then inner).wrap/2: Wraps a prism value into the monoid.
Examples
iex> alias Funx.Monoid.Optics.PrismCompose
iex> alias Funx.Optics.Prism
iex> prisms = [
...> Prism.key(:account),
...> Prism.key(:name)
...> ]
iex> wrapped = Enum.map(prisms, &PrismCompose.new/1)
iex> composed = Funx.Monoid.Utils.m_concat(%PrismCompose{}, prisms)
iex> Prism.preview(%{account: %{name: "Alice"}}, composed)
%Funx.Monad.Maybe.Just{value: "Alice"}
Summary
Types
@type t() :: %Funx.Monoid.Optics.PrismCompose{prism: Funx.Optics.Prism.t()}
Functions
@spec new(Funx.Optics.Prism.t()) :: t()
Wraps a prism in a PrismCompose monoid.
@spec unwrap(t()) :: Funx.Optics.Prism.t()
Extracts the prism from a PrismCompose wrapper.