{"id":17251184,"url":"https://github.com/fumieval/haskell-breaking-changes","last_synced_at":"2025-04-12T12:06:42.021Z","repository":{"id":46087176,"uuid":"427619880","full_name":"fumieval/Haskell-breaking-changes","owner":"fumieval","description":null,"archived":false,"fork":false,"pushed_at":"2021-11-18T09:35:01.000Z","size":10,"stargazers_count":89,"open_issues_count":0,"forks_count":1,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-26T06:44:10.658Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fumieval.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-13T09:21:07.000Z","updated_at":"2024-10-06T20:28:20.000Z","dependencies_parsed_at":"2022-09-18T08:51:38.897Z","dependency_job_id":null,"html_url":"https://github.com/fumieval/Haskell-breaking-changes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fumieval%2FHaskell-breaking-changes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fumieval%2FHaskell-breaking-changes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fumieval%2FHaskell-breaking-changes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fumieval%2FHaskell-breaking-changes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fumieval","download_url":"https://codeload.github.com/fumieval/Haskell-breaking-changes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248565062,"owners_count":21125415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T06:50:32.947Z","updated_at":"2025-04-12T12:06:42.002Z","avatar_url":"https://github.com/fumieval.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"This document describes a list of upcoming/proposed changes to Haskell core/de facto libraries.\n\n* **Ongoing**: the change is already rolled out.\n* **Upcoming**: the change is made upstream, and will be released in near future.\n* **Planned**: the change has been approved by the committee. Implementation is not necessaryly available\n\nOngoing: Word8#\n----\n\n* Summary: `Word{8,16,32}` are now defined in terms of the corresponding primitive types instead of `Word#`.\n* Reason: Small word types used to store `Word#` inside, making record types containing them space-inefficient.\n* Since: GHC 9.2\n* Breakage: major\n* Proposal: https://ghc-proposals.readthedocs.io/en/latest/proposals/0074-small-primitives.html\n* Merge request: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4390\n* How to fix: insert `word*ToWord*` (https://hackage.haskell.org/package/ghc-prim-0.8.0/docs/GHC-Prim.html#v:word8ToWord-35-) conditionally (cf. [Fix build on GHC 9.2 by josephcsible · Pull Request #354 · haskell-crypto/cryptonite](https://github.com/haskell-crypto/cryptonite/pull/354/files)) using CPP\n\nUpcoming: Remove `Control.Monad.Trans.List`\n----\n\n* Summary: `Control.Monad.Trans.List` is gone\n* Reason: `ListT` is a monad only if the underlying monad is commutative; therefore it is not a valid monad transformer.\n* ETA: GHC 9.4 / transformers-0.6\n* Expected breakage: medium\n* Tracking issue: https://hub.darcs.net/ross/transformers/issue/75\n* Patch: https://hub.darcs.net/ross/transformers/patch/7c809b6f9db019ed761c971d10c86fa004f60d89\n* How to fix: remove instance declarations for transformer's `ListT` (deprecated).\n    Users should switch to lawful alternatives such as [pipes](https://hackage.haskell.org/package/pipes-4.3.16/docs/Pipes.html#g:5).\n\nUpcoming: Remove `Control.Monad.Trans.Error`\n----\n\n* Summary: `Control.Monad.Trans.Error` is removed in favour of `Control.Monad.Trans.Except`.\n* Reason: `ErrorT` imposes an Error constraint, making it difficult to use as a general-purpose `Either` transformer.\n* ETA: GHC 9.4 / transformers-0.6\n* Expected breakage: medium\n* Tracking issue: N/A\n* Patch: https://hub.darcs.net/ross/transformers/patch/7c809b6f9db019ed761c971d10c86fa004f60d89\n* How to fix: remove instance declarations for `ErrorT` and switch to `ExceptT`\n\nUpcoming: Monomorphise Data.List\n----\n\n* Summary: Foldable/Traversable-polymorphic functions in Data.List get specialised to `[]`\n* Reason: There's a custom importing `Data.List` unqualified, making additions like `singleton` and `uncons` controversial. Making the list API monomorphic and encouraging to import it qualified make it more consistent with other container modules.\n* ETA: GHC 9.6 / base-4.18?\n* Proposal: https://groups.google.com/g/haskell-core-libraries/c/q3zHLmzBa5E/m/OrHHKaJNAQAJ?pli=1\n* Tracking issue: [#20025](https://gitlab.haskell.org/ghc/ghc/-/issues/20025)\n* Merge request: [!5304](https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5304)\nhttps://gitlab.haskell.org/ghc/ghc/-/merge_requests/5107\n* Expected breakage: significant\n* Relevant warnings: `-Wcompat-unqualified-imports` (implied by -Wcompat)\n* How to fix: import `Data.List` qualified or explicitly import functions that don't conflict with Foldable/Traversable variants\n\nPlanned: forall becomes a keyword\n----\n\n* Summary: 'forall' will become a keyword at the term level\n* Reason: Making Type-level and term-level syntax more consistent is a way forward to introduce dependent types\n* Proposal: [Visible 'forall' in types of terms](https://github.com/ghc-proposals/ghc-proposals/pull/281)\n* ETA: GHC 9.10?\n* Tracking issue: N/A\n* Merge request: N/A\n* Expected breakage: minor (authors of the affected packages were notified)\n* Relevant warnings: `-Wforall-identifier` (introduced and enabled by default in GHC 9.4)\n* How to fix: Rename identifiers\n\nPlanned: remove return from Monad\n----\n\n* Summary: return gets removed from the Monad class and becomes a top-level function defined as `return = pure`\n* Reason: Now that Monad is a subclass of Applicative, `return` is completely redundant (it doesn't make sense if `return` is not `pure`).\n* Proposal: [GHC wiki: monad-of-no-return](https://gitlab.haskell.org/ghc/ghc/-/wikis/proposal/monad-of-no-return), related: [Enable -Wnoncanonical-monad-instances and -Wnoncanonical-monoid-instances by default](https://github.com/ghc-proposals/ghc-proposals/pull/314)\n* ETA: Unknown\n* Tracking issue: N/A\n* Merge request: N/A\n* Expected breakage: minor (canonical definition of `return` will be ignored)\n* Relevant warnings: `-Wnoncanonical-monad-instances` (enabled by default as of GHC 9.2)\n* How to fix: Remove definitions of return (compatible up to GHC 7.10)\n\nPlanned: remove mappend from Monoid\n----\n\n* Summary: mappend gets removed from the Monoid class and becomes a top-level function defined as `mappend = (\u003c\u003e)`\n* Reason: Since `Semigroup` is a superclass of `Monoid`, `mappend` does not have to be defined.\n* Proposal: [GHC wiki: semigroup-monoid](https://gitlab.haskell.org/ghc/ghc/-/wikis/proposal/semigroup-monoid), related: [Enable -Wnoncanonical-monad-instances and -Wnoncanonical-monoid-instances by default](https://github.com/ghc-proposals/ghc-proposals/pull/314)\n* ETA: Unknown\n* Tracking issue: N/A\n* Merge request: N/A\n* Expected breakage: major (without an update to the warning)\n* Relevant warnings: `-Wnoncanonical-monoid-instances` (enabled by default as of GHC 9.2)\n* How to fix: Remove definitions of mappend (compatible up to GHC 8.4)\n* TODO: make `-Wnoncanonical-monoid-instances` warn manual declarations of `mappend`\n\nPlanned: remove (/=) from the the Eq class\n----\n\n* Summary: (/=) gets removed from the Eq class and becomes a top-level function defined as `a /= b = not (a == b)`\n* Reason: The only valid semantics of `x /= y` is `not (x == y)`; unlike `compare` vs `(\u003c=)`, there's no room for any performance improvements.\n* Proposal: https://github.com/haskell/core-libraries-committee/issues/3\n* ETA: Unknown\n* Tracking issue: N/A\n* Merge request: N/A\n* Expected breakage: 131 packages according to the proposal\n* How to fix: Remove definitions of `(/=)` (backward-compatible)\n\n\nPlanned: disable StarIsType by default\n----\n\n* Summary: `*` will no longer be parsed as a kind of value types (`Type`).\n* Reason: Special treatment to `*` complicates the syntax and prevents the use of it as a type operator.\n* Proposal: https://github.com/ghc-proposals/ghc-proposals/pull/143\n* ETA: Unknown\n* Tracking issue: N/A\n* Merge request: N/A\n* Expected breakage: medium\n* Relevant warnings: `-Wstar-is-type`\n* How to fix: Replace `*` with `Type` (from `Data.Kind`)\n\nSee also\n----\n\n* [deprecation-mechanisms/type-class-methods](https://gitlab.haskell.org/ghc/ghc/-/wikis/design/deprecation-mechanisms/type-class-methods) (not implemented; it would be nice to have method deprecation)\n* [Warnings and sanity-checking](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/using-warnings.html)\n* [Approved core library proposals](https://github.com/haskell/core-libraries-committee/issues?q=is%3Aissue+is%3Aclosed+label%3Aapproved)\n* [Accepted GHC proposals](https://github.com/ghc-proposals/ghc-proposals/pulls?q=is%3Apr+is%3Aclosed+label%3AAccepted)\n* [GHC Boot Library Version History](https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history): useful for updating version constraints\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffumieval%2Fhaskell-breaking-changes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffumieval%2Fhaskell-breaking-changes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffumieval%2Fhaskell-breaking-changes/lists"}