Skip to content

Commit 058cdde

Browse files
natefaubionpaf31
authored andcommitted
Add unsafeHas (#14)
1 parent d39eb6e commit 058cdde

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

src/Data/Record/Unsafe.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,7 @@ exports.unsafeDeleteFn = function(label, rec) {
2424
}
2525
return copy;
2626
};
27+
28+
exports.unsafeHasFn = function(label, rec) {
29+
return {}.hasOwnProperty.call(rec, label);
30+
};

src/Data/Record/Unsafe.purs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@ module Data.Record.Unsafe
22
( unsafeGetFn
33
, unsafeSetFn
44
, unsafeDeleteFn
5+
, unsafeHasFn
56
, unsafeGet
67
, unsafeSet
78
, unsafeDelete
9+
, unsafeHas
810
) where
911

1012
import Data.Function.Uncurried (Fn2, Fn3, runFn2, runFn3)
1113

1214
foreign import unsafeGetFn :: forall r a. Fn2 String (Record r) a
1315
foreign import unsafeSetFn :: forall r1 r2 a. Fn3 String a (Record r1) (Record r2)
1416
foreign import unsafeDeleteFn :: forall r1 r2. Fn2 String (Record r1) (Record r2)
17+
foreign import unsafeHasFn :: forall r1. Fn2 String (Record r1) Boolean
1518

1619
unsafeGet :: forall r a. String -> Record r -> a
1720
unsafeGet = runFn2 unsafeGetFn
@@ -21,3 +24,6 @@ unsafeSet = runFn3 unsafeSetFn
2124

2225
unsafeDelete :: forall r1 r2. String -> Record r1 -> Record r2
2326
unsafeDelete = runFn2 unsafeDeleteFn
27+
28+
unsafeHas :: forall r1. String -> Record r1 -> Boolean
29+
unsafeHas = runFn2 unsafeHasFn

test/Main.purs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Prelude
55
import Control.Monad.Eff (Eff)
66
import Data.Record.Builder as Builder
77
import Data.Record (delete, get, insert, modify, set, equal)
8+
import Data.Record.Unsafe (unsafeHas)
89
import Data.Symbol (SProxy(..))
910
import Test.Assert (ASSERT, assert')
1011

@@ -27,6 +28,10 @@ main = do
2728
equal { a: 1, b: "b", c: true } { a: 1, b: "b", c: true }
2829
assert' "equal2" $
2930
not $ equal { a: 1, b: "b", c: true } { a: 1, b: "b", c: false }
31+
assert' "unsafeHas1" $
32+
unsafeHas "a" { a: 42 }
33+
assert' "unsafeHas2" $
34+
not $ unsafeHas "b" { a: 42 }
3035

3136
let testBuilder = Builder.build (Builder.insert x 42
3237
>>> Builder.merge { y: true, z: "testing" }

0 commit comments

Comments
 (0)