Fix type inference by exposing classless API #53
Merged
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.
Description of the change
Previously, compiler would fail to infer the type of
Buffer.create 1
asEffect Buffer
because the Buffer API was exposed only via the multiparameter typeclass
MonadBuffer
.Due to the functional dependency between the two parameters, the monadic type cannot be inferred
until the buffer type is known (either
Buffer
orSTBuffer
).:The workaround was to add a type annotation, indicating the
x
is aBuffer
:This change does not break anyone's code if one was using a
create
(or another such typeclass member)to get
Int -> Effect Buffer
. Rather, such users can now drop the:: Buffer
annotation(i.e. Example 1 above now compiles).
If one was using
create
to getforall m buf. MonadBuffer buf m => Int -> m buf
,then one will need to update their imports:
Checklist: