@@ -5,14 +5,38 @@ import * as T from '../src/Traversal'
55import { Traversable } from 'fp-ts/ReadonlyArray'
66import { pipe } from 'fp-ts/function'
77const PL = require ( 'partial.lenses' )
8+ import * as O from 'optics-ts'
89
910/*
10- prism into array (monocle-ts, stable APIs) x 1,140 ops/sec ±0.49% (87 runs sampled)
11- prism into array (monocle-ts, experimental APIs) x 958 ops/sec ±3.06% (86 runs sampled)
12- prism into array (partial.lenses) x 460,357 ops/sec ±0.46% (89 runs sampled)
13- prism modify array (monocle-ts, stable APIs) x 1,320 ops/sec ±0.64% (86 runs sampled)
14- prism modify array (monocle-ts, experimental APIs) x 1,423 ops/sec ±3.40% (84 runs sampled)
15- prism modify array (partial.lenses) x 2,329 ops/sec ±0.49% (87 runs sampled)
11+ size = 5000
12+ prism into array (monocle-ts, stable APIs) x 1,123 ops/sec ±0.37% (87 runs sampled)
13+ prism into array (monocle-ts, experimental APIs) x 951 ops/sec ±2.18% (86 runs sampled)
14+ prism into array (partial.lenses) x 451,070 ops/sec ±1.17% (89 runs sampled)
15+ prism into array (optics-ts) x 10,672 ops/sec ±2.82% (84 runs sampled)
16+ prism modify array (monocle-ts, stable APIs) x 1,336 ops/sec ±0.61% (89 runs sampled)
17+ prism modify array (monocle-ts, experimental APIs) x 1,251 ops/sec ±2.06% (87 runs sampled)
18+ prism modify array (partial.lenses) x 2,191 ops/sec ±2.12% (81 runs sampled)
19+ prism modify array (optics-ts) x 3,763 ops/sec ±0.51% (92 runs sampled)
20+
21+ size = 500
22+ prism into array (monocle-ts, stable APIs) x 10,328 ops/sec ±7.12% (87 runs sampled)
23+ prism into array (monocle-ts, experimental APIs) x 9,230 ops/sec ±0.41% (91 runs sampled)
24+ prism into array (partial.lenses) x 466,256 ops/sec ±0.49% (86 runs sampled)
25+ prism into array (optics-ts) x 105,339 ops/sec ±0.45% (94 runs sampled)
26+ prism modify array (monocle-ts, stable APIs) x 13,290 ops/sec ±1.53% (82 runs sampled)
27+ prism modify array (monocle-ts, experimental APIs) x 12,911 ops/sec ±0.64% (88 runs sampled)
28+ prism modify array (partial.lenses) x 30,039 ops/sec ±0.45% (91 runs sampled)
29+ prism modify array (optics-ts) x 37,777 ops/sec ±0.46% (90 runs sampled)
30+
31+ size = 50
32+ prism into array (monocle-ts, stable APIs) x 95,180 ops/sec ±10.31% (89 runs sampled)
33+ prism into array (monocle-ts, experimental APIs) x 87,631 ops/sec ±0.39% (90 runs sampled)
34+ prism into array (partial.lenses) x 462,813 ops/sec ±0.27% (90 runs sampled)
35+ prism into array (optics-ts) x 558,323 ops/sec ±0.46% (91 runs sampled)
36+ prism modify array (monocle-ts, stable APIs) x 111,160 ops/sec ±0.63% (88 runs sampled)
37+ prism modify array (monocle-ts, experimental APIs) x 113,941 ops/sec ±0.59% (86 runs sampled)
38+ prism modify array (partial.lenses) x 200,423 ops/sec ±0.56% (87 runs sampled)
39+ prism modify array (optics-ts) x 251,464 ops/sec ±0.37% (90 runs sampled)
1640*/
1741
1842const suite = new Benchmark . Suite ( )
@@ -74,13 +98,22 @@ const traversalPartialLenses = PL.compose(
7498
7599const foldPartialLenses = PL . compose ( traversalPartialLenses , PL . valueOr ( undefined ) )
76100
77- const nameModified = 'Luke-' + mid + '-modified'
78-
79101const traversalMonocleExperimentalModify = pipe (
80102 traversalMonocleExperimental ,
81103 T . modify ( ( s ) => ( { ...s , name : nameModified } ) )
82104)
83105
106+ const traversalOpticsTs = O . optic < typeof data > ( )
107+ . prop ( 'm' )
108+ . prop ( 'n' )
109+ . prop ( 'names' )
110+ . elems ( )
111+ // `item` here has type: `NotAnArrayType<readonly Child[]>`, not sure what it means
112+ . when ( ( item : any ) => item . id === id )
113+
114+ const nameModified = 'Luke-' + mid + '-modified'
115+ const f = ( c : Child ) : Child => ( { ...c , name : nameModified } )
116+
84117suite
85118 . add ( 'prism into array (monocle-ts, stable APIs)' , function ( ) {
86119 foldMonocleStable . headOption ( data )
@@ -91,14 +124,20 @@ suite
91124 . add ( 'prism into array (partial.lenses)' , function ( ) {
92125 PL . get ( foldPartialLenses , data )
93126 } )
127+ . add ( 'prism into array (optics-ts)' , function ( ) {
128+ O . preview ( traversalOpticsTs ) ( data )
129+ } )
94130 . add ( 'prism modify array (monocle-ts, stable APIs)' , function ( ) {
95- traversalMonocleStable . modify ( ( s ) => ( { ... s , name : nameModified } ) ) ( data )
131+ traversalMonocleStable . modify ( f ) ( data )
96132 } )
97133 . add ( 'prism modify array (monocle-ts, experimental APIs)' , function ( ) {
98134 traversalMonocleExperimentalModify ( data )
99135 } )
100136 . add ( 'prism modify array (partial.lenses)' , function ( ) {
101- PL . modify ( traversalPartialLenses , ( s : Child ) => ( { ...s , name : nameModified } ) , data )
137+ PL . modify ( traversalPartialLenses , f , data )
138+ } )
139+ . add ( 'prism modify array (optics-ts)' , function ( ) {
140+ O . modify ( traversalOpticsTs ) ( f as any ) ( data )
102141 } )
103142 . on ( 'cycle' , function ( event : any ) {
104143 // tslint:disable-next-line: no-console
0 commit comments