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.
Closes #351.
I sat down with @ccasin today to look at #351. He convinced me that it is actually fine to return
forall a. a -> a
as the type ofr
inr <- return (\i.i)
, even thoughreturn (\i.i)
has typeforall a. cmd (a -> a)
and we can never have a typecmd (forall a. a -> a)
. Basically, in a Hindley-Milner-style system it is always safe to generalize at any time.The real problem --- which I was very close to discovering in #351 (comment) --- is simply that we need to generalize the type of variables bound by
<-
. However, we need to make sure to do so before putting that variable in the context, which I apparently failed to do when I tried fixing this before.