-
-
Notifications
You must be signed in to change notification settings - Fork 23
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
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
davidchambers
commented
Dec 26, 2023
davidchambers
commented
Dec 26, 2023
91a2add
to
1ae7019
Compare
Avaq
reviewed
Jan 5, 2024
There was a problem hiding this 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:
Avaq
reviewed
Jan 5, 2024
Avaq
approved these changes
Jan 6, 2024
487089f
to
764ab00
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 viadef
aware of this type. This applies to functions previously defined viadef
and to functions defined viadef
in the future.Type checking is now enabled or disabled by assigning
true
orfalse
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.