polytropos-microlens: Lightweight microlens optics integration for polytropos open records

[ data, library, optics ] [ Propose Tags ] [ Report a vulnerability ]

Lightweight optics integration between polytropos open records and microlens.

Designed specifically for codebases prioritizing fast compilation times and zero transitive dependency bloat: depends strictly on base, microlens, polytropos-core, and polytropos-plugin.

Provides O(1) field lenses via Polytropos.Microlens.fieldLens (with slot indices emitted as literals by the TcPlugin) and homogeneous single-pass traversals over flat contiguous payload arrays via Lens.Micro.each.

Start at the front door module Polytropos.Microlens for complete documentation, usage guidelines, and worked examples.


[Skip to Readme]

Modules

  • Polytropos
    • Polytropos.Microlens

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.2
Change log CHANGELOG.md
Dependencies base (>=4.14 && <5), microlens (>=0.4 && <0.5), polytropos-core (>=0.1 && <0.2), polytropos-plugin (>=0.1 && <0.2) [details]
License (EUPL-1.2 OR Apache-2.0)
Author Nadia Yvette Chambers
Maintainer nadia.yvette.chambers@ik.me
Uploaded by nyc at 2026-10-21T21:34:24Z
Category Optics, Data
Home page https://github.com/NadiaYvette/polytropos
Bug tracker https://github.com/NadiaYvette/polytropos/issues
Source repo head: git clone https://github.com/NadiaYvette/polytropos(packages/polytropos-microlens)
Distributions
Downloads 3 total (3 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs pending
Build status unknown [no reports yet]

Readme for polytropos-microlens-0.1.0.2

[back to package description]

polytropos-microlens

Lightweight microlens optics integration for polytropos open records and variants.

Overview

polytropos-microlens provides lightweight lenses and prisms for developers who prefer the minimal footprint of microlens over full lens.

Features

  • fieldLens: \(O(1)\) Lens' targeting record fields.
  • ctorPrism: \(O(1)\) constructor prism for variant branches.
  • Minimal Dependencies: Fast compilation and low dependency count.

Quick Example

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -fplugin=Polytropos.Plugin #-}

import Lens.Micro ((^.), (%~), (&))
import Polytropos
import Polytropos.Microlens

type User = Record '["name" ':= String, "score" ':= Int]

user :: User
user = REC { name = "Alice", score = 95 }

-- Access a field via heterogeneous fieldLens:
userName :: String
userName = user ^. fieldLens (Field @"name")

-- Update a field with minimal dependency footprint:
user' :: User
user' = user & fieldLens (Field @"score") %~ (+ 5)

License

Dual-licensed under EUPL-1.2 OR Apache-2.0.