Skip to content

Commit

Permalink
reinstate S.unchecked
Browse files Browse the repository at this point in the history
  • Loading branch information
davidchambers committed Apr 8, 2018
1 parent 147b8b6 commit 97cbc52
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
26 changes: 26 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@
//. });
//. ```
//.
//. Occasionally one may wish to perform an operation which is not type safe,
//. such as mapping over an object with heterogeneous values. This is possible
//. via selective use of [`unchecked`](#unchecked) functions.
//.
//. ## API

(function(f) {
Expand Down Expand Up @@ -404,6 +408,8 @@
(Object.keys (_)).forEach (function(name) {
S[name] = def (name) (_[name].consts) (_[name].types) (_[name].impl);
});
S.unchecked = opts.checkTypes ? create ({checkTypes: false, env: opts.env})
: S;
return S;
}
_.create = {
Expand Down Expand Up @@ -450,6 +456,26 @@
//. . $.ValidNumber ]
//. ```

//# unchecked :: Module
//.
//. A complete Sanctuary module which performs no type checking. This is
//. useful as it permits operations which Sanctuary's type checking would
//. disallow, such as mapping over an object with heterogeneous values.
//.
//. See also [`create`](#create).
//.
//. ```javascript
//. > S.unchecked.map (S.toString) ({x: 'foo', y: true, z: 42})
//. {x: '"foo"', y: 'true', z: '42'}
//. ```
//.
//. Opting out of type checking may cause type errors to go unnoticed.
//.
//. ```javascript
//. > S.unchecked.add (2) ('2')
//. '22'
//. ```

//. ### Classify

//# type :: Any -> { namespace :: Maybe String, name :: String, version :: NonNegativeInteger }
Expand Down
5 changes: 5 additions & 0 deletions test/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ test ('create', function() {
eq (uncheckedDefaultEnv.env) (S.env);
eq (uncheckedCustomEnv.env) (customEnv);

eq (checkedDefaultEnv.unchecked.env) (S.env);
eq (checkedCustomEnv.unchecked.env) (customEnv);
eq (uncheckedDefaultEnv.unchecked.env) (S.env);
eq (uncheckedCustomEnv.unchecked.env) (customEnv);

eq (uncheckedDefaultEnv.add (1) (42)) (S.add (1) (42));
eq (uncheckedDefaultEnv.add (1) ('XXX')) ('1XXX');

Expand Down
15 changes: 15 additions & 0 deletions test/unchecked.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'use strict';

var S = require ('..');

var eq = require ('./internal/eq');


test ('unchecked', function() {

eq (S.unchecked.add (2) (2)) (4);
eq (S.unchecked.add (2) ('2')) ('22');
eq (S.unchecked.add ('2') (2)) ('22');
eq (S.unchecked.add ('2') ('2')) ('22');

});

0 comments on commit 97cbc52

Please sign in to comment.