Skip to content

3.5.0 async uncancelable changes are not enforced by laws #3725

@neko-kai

Description

@neko-kai

In 3.5.0 there was a breaking semantic change to async/async_:

As of 3.5.0, the following is now considered to be uncancelable:

IO {
  // ...
  None    // we aren't returning a finalizer
  }
}

Previously, the above was cancelable without any caveats. Notably, this applies to all uses of the async_ constructor!

There are no new laws to ensure this behavior, a build updating to 3.5.1 passes without having to add uncancelability to the implemenation of async.

I think this may be a potential footgun for any third-party implementors of CE typeclasses if the laws don't specify this behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions