Funx.Monoid.Optics.PrismCompose (funx v0.8.0)

View Source

The 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 a PrismCompose monoid.
  • unwrap/1: Extracts the prism from a PrismCompose wrapper.

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

Functions

Wraps a prism in a PrismCompose monoid.

Extracts the prism from a PrismCompose wrapper.

Types

t()

@type t() :: %Funx.Monoid.Optics.PrismCompose{prism: Funx.Optics.Prism.t()}

Functions

new(prism)

@spec new(Funx.Optics.Prism.t()) :: t()

Wraps a prism in a PrismCompose monoid.

unwrap(prism_compose)

@spec unwrap(t()) :: Funx.Optics.Prism.t()

Extracts the prism from a PrismCompose wrapper.