Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Language Ext | 5,348 | 48 | 154 | 4 days ago | 446 | June 29, 2022 | 50 | mit | C# | |
C# functional language extensions - a base class library for functional programming | ||||||||||
Pyrsistent | 1,797 | 1,722 | 358 | 3 months ago | 71 | January 14, 2022 | 18 | mit | Python | |
Persistent/Immutable/Functional data structures for Python | ||||||||||
Robot | 1,727 | 5 | 14 | 12 days ago | 23 | May 28, 2022 | 29 | bsd-2-clause | JavaScript | |
🤖 A functional, immutable Finite State Machine library | ||||||||||
List | 1,638 | 53 | 18 | 25 days ago | 33 | October 09, 2019 | 23 | mit | TypeScript | |
🐆 An immutable list with unmatched performance and a comprehensive functional API. | ||||||||||
Functionaljava | 1,488 | 230 | 57 | a year ago | 18 | February 11, 2022 | 28 | Java | ||
Functional programming in Java | ||||||||||
Monet.js | 1,440 | 111 | 89 | a year ago | 55 | November 28, 2021 | 25 | mit | JavaScript | |
monet.js - Monadic types library for JavaScript | ||||||||||
Omniscient | 1,196 | 88 | 10 | 4 years ago | 21 | October 19, 2017 | 11 | JavaScript | ||
A library providing an abstraction for React components that allows for fast top-down rendering embracing immutable data for js | ||||||||||
Partial.lenses | 791 | 93 | 46 | 3 years ago | 180 | November 06, 2018 | 20 | mit | JavaScript | |
Partial lenses is a comprehensive, high-performance optics library for JavaScript | ||||||||||
Bqn | 612 | a day ago | 1 | isc | KakouneScript | |||||
An APL-like programming language. Self-hosted! | ||||||||||
Functional Ruby | 551 | 5 | 2 | 5 years ago | 15 | October 04, 2015 | 2 | other | Ruby | |
A gem for adding functional programming tools to Ruby. Inspired by Erlang, Clojure, Haskell, and Functional Java. |
optics-ts
provides type-safe, ergonomic, polymorphic optics for TypeScript:
any
,
ever.optics-ts
supports lenses, prisms, traversals, removing items from containers,
and much more!
Since optics-ts v2.2.0, there are two syntaxes for defining optics: method chaining (the default) and standalone optics (experimental). See the docs for more info!
Installation:
npm install optics-ts
or
yarn add optics-ts
Here's a simple example demonstrating how lenses can be used to drill into a nested data structure:
import * as O from 'optics-ts'
type Book = {
title: string
isbn: string
author: {
name: string
}
}
// Create a lens that focuses on author.name
const optic = O.optic_<Book>().prop('author').prop('name')
// This is the input data
const input: Book = {
title: "The Hitchhiker's Guide to the Galaxy",
isbn: '978-0345391803',
author: {
name: 'Douglas Adams',
},
}
// Read through the optic
O.get(optic)(input)
// "Douglas Adams"
// Write through the optic
O.set(optic)('Arthur Dent')(input)
// {
// title: "The Hitchhikers Guide to the Galaxy"
// isbn: "978-0345391803",
// author: {
// name: "Arthur Dent"
// }
// }
// Update the existing value through the optic, while also changing the data type
O.modify(optic)((str) => str.length + 29)(input)
// {
// title: "The Hitchhikers Guide to the Galaxy"
// isbn: "978-0345391803",
// author: {
// name: 42
// }
// }
Another example that converts all words longer than 5 characters to upper case:
import * as O from 'optics-ts/standalone'
const optic = O.optic<string>().words().when(s => s.length >= 5)
const input = 'This is a string with some shorter and some longer words'
O.modify(optic)((s) => s.toUpperCase()(input)
// "This is a STRING with some SHORTER and some LONGER WORDS"
See the documentation for a tutorial and a detailed reference of all supported optics.
Run yarn
to install dependencies.
Run yarn test
.
For compiling and running the tests when files change, run these commands in separate terminals:
yarn build:test --watch
yarn jest dist-test/ --watchAll
You need Python 3 to build the docs.
python3 -m venv venv
./venv/bin/pip install mkdocs-material
Run a live reloading server for the documentation:
./venv/bin/mkdocs serve
Open http://localhost:8000/ in the browser.
$ yarn version --new-version <major|minor|patch>
$ yarn publish
$ git push origin main --tags
Open https://github.com/akheron/optics-ts/releases, edit the draft release, select the newest version tag, adjust the description as needed.