@function anthology-extract($shorthand, $adjective, $breakpoint: null)
{
  // Ensure `A(configure, ...)` has been included prior.
  @if not $_anthology-config-is-ready {
    @error '[anthology::extract] --- Before extracting functional property values, call `@include A(configure...);`.';
  }

  @if $breakpoint and $breakpoint != 'default'
  {
    // Validate breakpoint
    @if not A(map-has-key, $_anthology-config-breakpoints, $breakpoint)
    {
      @error "[anthology::extract] --- Invalid breakpoint key: #{$breakpoint}. Choose one of: #{map-keys(A(map-get, $_anthology-define-state, 'responsive'))}, or default.";
    }

    // Validate arguments
    @if not A(map-has-key, $_anthology-emit-state, ('responsive', $breakpoint, $shorthand)) or not A(map-has-key, $_anthology-emit-state, ('responsive', $breakpoint, $shorthand, $adjective))
    {
      @error "[anthology::extract] --- Value undefined for args `(#{$shorthand}, #{$adjective}, #{$breakpoint})`. Have you called `A(emit-responsive, ...)`?";
    }

    @return nth(A(map-get, $_anthology-emit-state, ('responsive', $breakpoint, $shorthand, $adjective)), 2);
  }
  @else
  {
    // Validate arguments
    @if not A(map-has-key, $_anthology-emit-state, ('generic', $shorthand)) or not A(map-has-key, $_anthology-emit-state, ('generic', $shorthand, $adjective))
    {
      @error "[anthology::extract] --- Value undefined for args `(#{$shorthand}, #{$adjective})`. Have you called `A(emit, ...)`?";
    }

    @return nth(A(map-get, $_anthology-emit-state, ('generic', $shorthand, $adjective)), 2);
  }
}
