Skip to content

Latest commit

 

History

History
53 lines (40 loc) · 1.66 KB

README.md

File metadata and controls

53 lines (40 loc) · 1.66 KB

optics-operators

build License: MIT Hackage

A tiny package containing operators missing from the official package.

Why does this package exist?

The optics library is missing convenient operators that the lens library provides.
I've only added the operators I need for now. Feel free to open an issue or pull request to add new ones.

Quick start

This is a literate haskell file. You can run this example via the following:

nix develop --command cabal run --flags="build-readme"

Necessary language extensions and imports for the example:

{-# LANGUAGE DeriveGeneric, OverloadedLabels #-}
import GHC.Generics (Generic)
import Control.Monad.State (State, execState)
import Data.Optics.Operators ((+=), (-=), (*=))

Basic example using state operators:

newtype Person = Person
  { age :: Int
  } deriving (Show, Generic)

addAge :: Int -> State Person ()
addAge age = #age += age

subtractAge :: Int -> State Person ()
subtractAge age = #age -= age

Running the example:

person :: Person
person = Person 50

main :: IO ()
main = print . flip execState person $ do
  addAge 10
  subtractAge 20
  #age *= 2

-- Output: Person {age = 80}