File tree Expand file tree Collapse file tree 3 files changed +24
-1
lines changed Expand file tree Collapse file tree 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) {
1919 } ;
2020} ;
2121
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+
2231exports . unsafeDelete = function ( l ) {
2332 return function ( rec ) {
2433 delete rec [ l ] ;
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ module Data.Record.Builder
22 ( Builder
33 , build
44 , insert
5+ , modify
56 , delete
67 , rename
78 , merge
@@ -14,6 +15,7 @@ import Type.Row (class RowLacks)
1415
1516foreign import copyRecord :: forall r1 . Record r1 -> Record r1
1617foreign 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
1719foreign import unsafeDelete :: forall r1 r2 . String -> Record r1 -> Record r2
1820foreign import unsafeRename :: forall r1 r2 . String -> String -> Record r1 -> Record r2
1921foreign import unsafeMerge :: forall r1 r2 r3 . Record r1 -> Record r2 -> Record r3
@@ -49,6 +51,17 @@ insert
4951 -> Builder (Record r1 ) (Record r2 )
5052insert l a = Builder \r1 -> unsafeInsert (reflectSymbol l) a r1
5153
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+
5265-- | Build by deleting an existing field.
5366delete
5467 :: forall l a r1 r2
Original file line number Diff line number Diff line change @@ -49,7 +49,8 @@ main = do
4949 let testBuilder = Builder .build (Builder .insert x 42
5050 >>> Builder .merge { y: true , z: " testing" }
5151 >>> Builder .delete y
52+ >>> Builder .modify x show
5253 >>> Builder .rename z y) {}
5354
5455 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