Pre-release
Pre-release
garyb
released this
Assets
8
Breaking changes
- Added applicative-do notation;
adois now a keyword. An full explanation of the behaviour and usage ofadois available in a comment on the issue. (#2889, @rightfold) - Removed wrapper scripts for the old binary names (psc, psci, etc.) (#2993, @hdgarrood)
- Removed compiler support for deriving
purescript-generics.purescript-generics-repis still supported. (#3007, @paf31) - Instances with just one method now require the method to be indented (bug fix, but potentially breaking) (#2947, @quesebifurcan)
- Overlapping instances are now an error rather than a warning, but can be resolved with the new instance chain groups feature (#2315, @LiamGoodacre)
- Reworked the
CoreFnjson representation (#3049, @coot) - It is no longer possible to export a type class that has superclasses that are not also exported (bug fix, but potentially breaking) (#3132, @parsonsmatt)
EqandOrdderiving will now rely onEq1andOrd1constraints as necessary where sometimes previouslyEq (f _)would be required.Eq1andOrd1instances can also be derived. (#3207, @garyb)- Some
Primtype classes have been renamed/moved, so will require explicit importing (#3176, @parsonsmatt):RowConsis nowPrim.Row.ConsUnionis nowPrim.Row.UnionFailis nowPrim.TypeError.FailWarnis nowPrim.TypeError.Warn
- Users can no longer specify modules under the
Primnamespace (#3291, @parsonsmatt) TypeConcatandTypeStringhave been replaced because they were in kindSymbolbut weren't literals. ThePrim.TypeErrer.Dockind and related constructors (Text,Quote,Beside,Above) have been added in their place. TheFailandWarntype classes now accept aDocinstead of aSymbol.
(#3134, @LiamGoodacre)- In simple cases instance overlaps are now checked at declaration time rather than being deferred until an attempt is made to use them. (#3129, @LiamGoodacre)
- Chaining non-associative or mixed associativity operators of the same precedence is no longer allowed (#3315, @garyb)
- The
--dump-corefnand--source-mapsarguments topurs compilehave been removed. There is now a--codegenargument that allows the specific codegen targets to be specified - for example,--codegen corefnwill not produce JS files,--codgen js,corefnwill produce both. If thesourcemapstarget is usedjswill be implied, so there's no difference between--codegen js,sourcemapsand--codegen sourcemaps). If no targets are specified the default isjs. (#3196, @garyb, @gabejohnson) - Exported types that use foreign kinds now require the foreign kinds to be exported too (bug fix, but potentially breaking) (#3331, @garyb)
Enhancements
- Added
Conscompiler-solved type class forSymbol(#3054, @kcsongor) - The
Appendcompiler-solved type class forSymbolcan now be run in reverse (#3025, @paf31) - Find Usages for values and constructors in
purs ide(#3206, @kRITZCREEK) purs idetreatshidingimports the same as open imports when sorting (#3069, @kRITZCREEK)- Added inlining for fully saturated usages of
runEffFn/mkEffFn(#3026, @nwolverson) - Improved explanation of
UnusableDeclarationerror (#3088, #3304, @i-am-tom) - Improved rendering of comments in generated JavaScript by removing additional newlines (#3096, @brandonhamilton)
- Instance chain support. (#2315, @LiamGoodacre)
We can now express an explicit ordering on instances that would previously have been overlapping.
For example we could now write anIsEqualtype class to compute if two types are equal or apart:class IsEqual (l :: Type) (r :: Type) (o :: Boolean) | l r -> o instance isEqualRefl :: IsEqual x x True else instance isEqualContra :: IsEqual l r FalseNote the
elsekeyword that links the two instances together.
TheisEqualContrawill only be up for selection once the compiler knows it couldn't possible selectisEqualRefl- i.e thatlandrare definitely not equal. - Improved orphan instance error to include locations where the instance would be valid (#3106, @i-am-tom)
- Added an explicit error for better explanation of duplicate type class or instance declarations (#3093, @LiamGoodacre)
purs idenow provide documentation comments (#2349, @nwolverson)- Clarified meaning of duplicate labels in a
Recordrow (#3143, @paf31) - Explicit import suggestions consistently use
(..)for constructors now (#3142, @nwolverson) - Improved tab completion in
purs repl(#3227, @rndnoise) - Large compiler perfomance improvement in some cases by skipping source spans in
Eq,Ordfor binders (#3265, @bitemyapp) - Added support for error/warning messages to carry multiple source spans (#3255, @garyb)
- Improved tab completion in
purs replwhen parens and brackets are involved (#3236, @rndnoise) - Improved completion in
purs replafter:kindand:type(#3237, @rndnoise) - Added the "magic do" optimisation for the new simplified
Effecttype (Control.Monad.Effis still supported) (#3289, @kRITZCREEK, #3301, @garyb) - Improvide build startup times when resuming a build with incremental results (#3270, @kRITZCREEK)
- Added compiler-solved
Prim.Row.Nubtype class (#3293, @natefaubion) - Improved docs for
Prim.Row.ConsandPrim.Row.Union(#3292, @vladciobanu) Functorcan now be derived when quantifiers are used in constructors (#3232, @i-am-tom)purs replwill now complete types after::(#3239, @rndnoise)- Added compiler-solved
Prim.Row.Lackstype class (#3305, @natefaubion) - Added current output path to missing output error message from
purs ide(#3311, @rgrinberg) - Improved parser error messages for
.purs-repl(#3248, @rndnoise) requirein generated JavaScript now includes fullindex.jsfile paths (#2621, @chexxor)- Added more compiler-solved type classes and supporting types and kinds to
Prim:Prim.Orderingmodule withkind Ordering,type LT,type EQ,type GTPrim.RowListmodule withclass RowToList,kind RowList,type Nil,type ConsPrim.Symbolmodule withclass Compare,class Append,class Cons
(#3312, @LiamGoodacre, @kRITZCREEK)
- Generated code for closed records now explicitly reconstructs the record rather than looping (#1493, @fehrenbach, blog post with more details)
Bug fixes
- Fixed a bug with names cause by
Primalways being imported unqualified (#2197, @LightAndLight) - Fixed overlapping instances error message to reflect its new status as an error (#3084, @drets)
- Added source position to
TypeClassDeclarationerrors (#3109, @b123400) - Fixed entailment issues with skolems and matches in the typechecker (#3121, @LiamGoodacre)
- Fixed multiple parentheses around a type causing a crash (#3085, @MonoidMusician)
- Fixed
purs ideinserting conflicting imports for types (#3131, @nwolverson) - Fixed constraints being inferred differently for lambda expressions compared with equational declarations (#3125, @LiamGoodacre)
- Updated glob handling to prevent excessive memory usage (#3055, @hdgarrood)
- Added position information to warnings in type declarations (#3174, @b123400)
- Fixed documentation generated for Pursuit rendering functional dependency variables as identifier links (#3180, @houli)
- Naming a function argument
__unusedno longer breaks codegen (#3187, @matthewleon) - Added position information to
ShadowedNamewarning (#3213, @garyb) - Added position information to
UnusedTypeVarwarning (#3214, @garyb) - Added position information to
MissingClassMember,ExtraneousClassMember,ExpectedWildcarderrors (#3216, @garyb) - Added position information to
ExportConflicterrors (#3217, @garyb) - Fixed
ctagsandetagsgeneration when explicit exports are involved (#3204, @matthewleon) - Added position information to
ScopeShadowingwarning (#3219, @garyb) - Added position information for various FFI related errors and warnings (#3276, @garyb)
- Added all available positions to
CycleInModuleandDuplicateModuleerrors (#3273, @garyb) - Added position information for
IntOutOfRangeerrors (#3277, @garyb, @kRITZCREEK) - Warnings are now raised when a module re-exports a qualified module with implicit import (#2726, @garyb)
purs replnow shows results for:browse Prim(#2672, @rndnoise)- Added position information to
ErrorParsingFFIModule(#3307, @nwolverson) - Added position information for
ScopeConflictcause by exports (#3318, @garyb) - Added position information to errors that occur in binding groups and data binding groups (#3275, @garyb)
- Fixed a scoping issue when resolving operators (#2803, @kRITZCREEK, @LightAndLight)
- Type synonyms are now desugared earlier when newtype deriving (#3325, @LiamGoodacre)
- Fixed subgoals of compiler-solved type classes being ignored (#3333, @LiamGoodacre)
- Added position information to type operator associativity errors (#3337, @garyb)
Other
- Updated installation information to include details about prebuild binaries (#3167, @MiracleBlue)
- Test suite now prints output when failing cases are encountered (#3181, @parsonsmatt)
- Updated test suite to use tasty (#2848, @kRITZCREEK)
- Improved performance of
repltest suite (#3234, @rndnoise) - Refactored
letpattern desugaring to be less brittle (#3268, @kRITZCREEK) - Added makefile with common tasks for contributors (#3266, @bitemyapp)
- Added
ghcidand testing commands to makefile (#3290, @parsonsmatt) - Removed old unused
MultipleFFIModuleserror (#3308, @nwolverson) modanddivforIntare no longer inlined as their definition has changed in a way that makes their implementation more complicated - purescript/purescript-prelude#161 (#3309, @garyb)- The test suite now checks warnings and errors have position information (#3211, @garyb)
- The AST was updated to be able to differentiate between
letandwhereclauses (#3317, @joneshf) - Support for an optimization pass on
CoreFnwas added (#3319, @matthewleon)