Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

shared mutable environment #317

Merged
merged 1 commit into from
Jan 7, 2024
Merged

Conversation

davidchambers
Copy link
Member

@davidchambers davidchambers commented Dec 26, 2023

This may be the most significant change ever made to the way sanctuary-def works.

This library was built with purity in mind. Type variables in a definition only knew about the set of types closed over by the def function being used. This had far-reaching implications: Sanctuary users working with custom types needed to use a special function (S.create) to create a Sanctuary module whose polymorphic functions could recognize values of these types. This meant that tree shaking would remain impossible for many users even if the Sanctuary source code were to be converted to ECMAScript modules.

This pull request replaces the pure approach with an impure one. The environment, $.config.env, is now shared by all modules that depend on sanctuary-def. It is also (intentionally) mutable. Adding a type to this array will make all functions defined via def aware of this type. This applies to functions previously defined via def and to functions defined via def in the future.

Type checking is now enabled or disabled by assigning true or false respectively to $.config.checkTypes.

As there is now a shared environment and a shared Boolean indicating whether type checking should be performed, we need not support the creation of multiple def functions. This pull request introduces $.def, which makes $.create redundant.

This pull request also removes the dependence on the NODE_ENV environment variable.

index.js Outdated Show resolved Hide resolved
test/index.js Outdated Show resolved Hide resolved
Copy link
Member

@Avaq Avaq left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm liking these changes overall, removing this env being passed around everywhere feels like lifting a burden. I mostly have questions that might become concerns, and one or two suggestions:

.eslintrc.json Outdated Show resolved Hide resolved
index.js Show resolved Hide resolved
index.js Show resolved Hide resolved
index.js Show resolved Hide resolved
index.js Show resolved Hide resolved
index.js Show resolved Hide resolved
index.js Show resolved Hide resolved
test/index.js Outdated Show resolved Hide resolved
test/index.js Outdated Show resolved Hide resolved
test/index.js Outdated Show resolved Hide resolved
@davidchambers davidchambers merged commit c6b0fa2 into main Jan 7, 2024
3 checks passed
@davidchambers davidchambers deleted the davidchambers/mutable-env branch January 7, 2024 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants