File tree 3 files changed +24
-1
lines changed
3 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,15 @@ exports.unsafeInsert = function(l) {
19
19
} ;
20
20
} ;
21
21
22
+ exports . unsafeModify = function ( l ) {
23
+ return function ( f ) {
24
+ return function ( rec ) {
25
+ rec [ l ] = f ( rec [ l ] ) ;
26
+ return rec ;
27
+ } ;
28
+ } ;
29
+ } ;
30
+
22
31
exports . unsafeDelete = function ( l ) {
23
32
return function ( rec ) {
24
33
delete rec [ l ] ;
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ module Data.Record.Builder
2
2
( Builder
3
3
, build
4
4
, insert
5
+ , modify
5
6
, delete
6
7
, rename
7
8
, merge
@@ -14,6 +15,7 @@ import Type.Row (class RowLacks)
14
15
15
16
foreign import copyRecord :: forall r1 . Record r1 -> Record r1
16
17
foreign import unsafeInsert :: forall a r1 r2 . String -> a -> Record r1 -> Record r2
18
+ foreign import unsafeModify :: forall a b r1 r2 . String -> (a -> b ) -> Record r1 -> Record r2
17
19
foreign import unsafeDelete :: forall r1 r2 . String -> Record r1 -> Record r2
18
20
foreign import unsafeRename :: forall r1 r2 . String -> String -> Record r1 -> Record r2
19
21
foreign import unsafeMerge :: forall r1 r2 r3 . Record r1 -> Record r2 -> Record r3
@@ -49,6 +51,17 @@ insert
49
51
-> Builder (Record r1 ) (Record r2 )
50
52
insert l a = Builder \r1 -> unsafeInsert (reflectSymbol l) a r1
51
53
54
+ -- | Build by modifying an existing field.
55
+ modify
56
+ :: forall l a b r r1 r2
57
+ . RowCons l a r r1
58
+ => RowCons l b r r2
59
+ => IsSymbol l
60
+ => SProxy l
61
+ -> (a -> b )
62
+ -> Builder (Record r1 ) (Record r2 )
63
+ modify l f = Builder \r1 -> unsafeModify (reflectSymbol l) f r1
64
+
52
65
-- | Build by deleting an existing field.
53
66
delete
54
67
:: forall l a r1 r2
Original file line number Diff line number Diff line change @@ -49,7 +49,8 @@ main = do
49
49
let testBuilder = Builder .build (Builder .insert x 42
50
50
>>> Builder .merge { y: true , z: " testing" }
51
51
>>> Builder .delete y
52
+ >>> Builder .modify x show
52
53
>>> Builder .rename z y) {}
53
54
54
55
assert' " Data.Record.Builder" $
55
- testBuilder.x == 42 && testBuilder.y == " testing"
56
+ testBuilder.x == " 42 " && testBuilder.y == " testing"
You can’t perform that action at this time.
0 commit comments