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
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions