{"action":"created","issue":{"url":"https://api.github.com/repos/typelevel/cats-effect/issues/321","repository_url":"https://api.github.com/repos/typelevel/cats-effect","labels_url":"https://api.github.com/repos/typelevel/cats-effect/issues/321/labels{/name}","comments_url":"https://api.github.com/repos/typelevel/cats-effect/issues/321/comments","events_url":"https://api.github.com/repos/typelevel/cats-effect/issues/321/events","html_url":"https://github.com/typelevel/cats-effect/issues/321","id":354364455,"node_id":"MDU6SXNzdWUzNTQzNjQ0NTU=","number":321,"title":"Cats Effect 2.0 Design Discussion","user":{"login":"jdegoes","id":156745,"node_id":"MDQ6VXNlcjE1Njc0NQ==","avatar_url":"https://avatars1.githubusercontent.com/u/156745?v=4","gravatar_id":"","url":"https://api.github.com/users/jdegoes","html_url":"https://github.com/jdegoes","followers_url":"https://api.github.com/users/jdegoes/followers","following_url":"https://api.github.com/users/jdegoes/following{/other_user}","gists_url":"https://api.github.com/users/jdegoes/gists{/gist_id}","starred_url":"https://api.github.com/users/jdegoes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdegoes/subscriptions","organizations_url":"https://api.github.com/users/jdegoes/orgs","repos_url":"https://api.github.com/users/jdegoes/repos","events_url":"https://api.github.com/users/jdegoes/events{/privacy}","received_events_url":"https://api.github.com/users/jdegoes/received_events","type":"User","site_admin":false},"labels":[{"id":593748869,"node_id":"MDU6TGFiZWw1OTM3NDg4Njk=","url":"https://api.github.com/repos/typelevel/cats-effect/labels/discussion","name":"discussion","color":"c2e0c6","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":44,"created_at":"2018-08-27T15:24:40Z","updated_at":"2019-01-02T20:54:20Z","closed_at":null,"author_association":"NONE","body":"For Cats Effect 2.0, I'd propose the following:\r\n\r\n1. Refocus Cats Effect 2.0 on enabling interop via a common set of type classes, together with any essential, core building blocks that can be expressed in terms of these type classes (e.g. `Ref`, etc.).\r\n2. Move `IO` into `cats-io`, with a separate (but initially overlapping) set of maintainers, and its own independent release schedule. Those so interested can enhance it with other utilities like linebacker, scheduling, etc. Importantly, `cats-io` would depend on `cats-effect`, not the other way around.\r\n3. Redesign the hierarchy based on everything we've learned from 1.x. I've had discussions with many people on this and can summarize them if useful.\r\n4. Support bifunctor and monofunctor type classes (with an `EitherT` adapter?), in synchronous and asynchronous variations (@mpilquist has convincing use cases for synchronous variants), in a clean and minimalist hierarchy that works across Monix Task, Cats IO, and ZIO. The bifunctor type classes should be truly bifunctor (`F[_, _]`).\r\n\r\nThese steps would, in my opinion, take what's good about Cats Effects and make it better, while reducing maintenance burden, supporting the whole FP ecosystem, and solving well-known problems with the current design."},"comment":{"url":"https://api.github.com/repos/typelevel/cats-effect/issues/comments/450981957","html_url":"https://github.com/typelevel/cats-effect/issues/321#issuecomment-450981957","issue_url":"https://api.github.com/repos/typelevel/cats-effect/issues/321","id":450981957,"node_id":"MDEyOklzc3VlQ29tbWVudDQ1MDk4MTk1Nw==","user":{"login":"jdegoes","id":156745,"node_id":"MDQ6VXNlcjE1Njc0NQ==","avatar_url":"https://avatars1.githubusercontent.com/u/156745?v=4","gravatar_id":"","url":"https://api.github.com/users/jdegoes","html_url":"https://github.com/jdegoes","followers_url":"https://api.github.com/users/jdegoes/followers","following_url":"https://api.github.com/users/jdegoes/following{/other_user}","gists_url":"https://api.github.com/users/jdegoes/gists{/gist_id}","starred_url":"https://api.github.com/users/jdegoes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jdegoes/subscriptions","organizations_url":"https://api.github.com/users/jdegoes/orgs","repos_url":"https://api.github.com/users/jdegoes/repos","events_url":"https://api.github.com/users/jdegoes/events{/privacy}","received_events_url":"https://api.github.com/users/jdegoes/received_events","type":"User","site_admin":false},"created_at":"2019-01-02T20:54:20Z","updated_at":"2019-01-02T20:54:20Z","author_association":"NONE","body":"This might be a nice addition after `Concurrent`:\r\n\r\n```scala\r\n    trait Cont[E, F[_+]] extends Concurrent[E, F] {\r\n      def cont[A](r: (F[A] => F[Unit]) => F[Unit]): F[A]\r\n    }\r\n```\r\n\r\nThere are some problems that can use this pure version that do not require the (parametric-reasoning-destroying) power of `Async`. Although it's no more powerful than `Deferred` which you could get separately with `ConcurrentData`, so... 🤷‍♂️ \r\n"}}
{"actor":{"display_login":"jdegoes"}}