This document describes a list of upcoming/proposed changes to Haskell core/de facto libraries.
Word{8,16,32} are now defined in terms of the corresponding primitive types instead of Word#.Word# inside, making record types containing them space-inefficient.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) using CPPControl.Monad.Trans.ListControl.Monad.Trans.List is goneListT is a monad only if the underlying monad is commutative; therefore it is not a valid monad transformer.ListT (deprecated).
Users should switch to lawful alternatives such as pipes.Control.Monad.Trans.ErrorControl.Monad.Trans.Error is removed in favour of Control.Monad.Trans.Except.ErrorT imposes an Error constraint, making it difficult to use as a general-purpose Either transformer.ErrorT and switch to ExceptT[]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.-Wcompat-unqualified-imports (implied by -Wcompat)Data.List qualified or explicitly import functions that don't conflict with Foldable/Traversable variants-Wforall-identifier (introduced and enabled by default in GHC 9.4)return = purereturn is completely redundant (it doesn't make sense if return is not pure).return will be ignored)-Wnoncanonical-monad-instances (enabled by default as of GHC 9.2)mappend = (<>)Semigroup is a superclass of Monoid, mappend does not have to be defined.-Wnoncanonical-monoid-instances (enabled by default as of GHC 9.2)-Wnoncanonical-monoid-instances warn manual declarations of mappenda /= b = not (a == b)x /= y is not (x == y); unlike compare vs (<=), there's no room for any performance improvements.(/=) (backward-compatible)* will no longer be parsed as a kind of value types (Type).* complicates the syntax and prevents the use of it as a type operator.-Wstar-is-type* with Type (from Data.Kind)This document describes a list of upcoming/proposed changes to Haskell core/de facto libraries.
Word{8,16,32} are now defined in terms of the corresponding primitive types instead of Word#.Word# inside, making record types containing them space-inefficient.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) using CPPControl.Monad.Trans.ListControl.Monad.Trans.List is goneListT is a monad only if the underlying monad is commutative; therefore it is not a valid monad transformer.ListT (deprecated).
Users should switch to lawful alternatives such as pipes.Control.Monad.Trans.ErrorControl.Monad.Trans.Error is removed in favour of Control.Monad.Trans.Except.ErrorT imposes an Error constraint, making it difficult to use as a general-purpose Either transformer.ErrorT and switch to ExceptT[]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.-Wcompat-unqualified-imports (implied by -Wcompat)Data.List qualified or explicitly import functions that don't conflict with Foldable/Traversable variants-Wforall-identifier (introduced and enabled by default in GHC 9.4)return = purereturn is completely redundant (it doesn't make sense if return is not pure).return will be ignored)-Wnoncanonical-monad-instances (enabled by default as of GHC 9.2)mappend = (<>)Semigroup is a superclass of Monoid, mappend does not have to be defined.-Wnoncanonical-monoid-instances (enabled by default as of GHC 9.2)-Wnoncanonical-monoid-instances warn manual declarations of mappenda /= b = not (a == b)x /= y is not (x == y); unlike compare vs (<=), there's no room for any performance improvements.(/=) (backward-compatible)* will no longer be parsed as a kind of value types (Type).* complicates the syntax and prevents the use of it as a type operator.-Wstar-is-type* with Type (from Data.Kind)