A strongly-typed language that compiles to JavaScript
This is an automated preview release. Get the latest stable release here.
New features:
Add --exclude-file
to more commands (#4530 by @JordanMartinez)
This CLI arg was added to the compile
command, but not to other commands
where such a usage would be relevant (e.g. docs
, repl
, graph
, and ide
).
Enable passing source input globs via --source-globs-file path/to/file
(#4530 by @JordanMartinez)
--source-globs-file
support has been added to the following commands:
compile
, docs
, graph
, ide
, and publish
.
Due to a shell character limitation on Windows where a large list of
source globs cannot be passed (e.g. purs compile ... glob1000/src/**/*.purs
),
source globs can be stored in a file according to the format below
and the file is passed in instead via purs compile ---source-globs-file path/to/file
.
# Lines starting with '#' are comments.
# Blank lines are ignored.
# Otherwise, every line is a glob.
.spago/foo-1.2.3/src/**/*.purs
.spago/bar-2.3.3/src/**/*.purs
my-package/src/**/*.purs
my-package/tests/**/*.purs
--source-globs-file
is an optional argument. Mixing it with the normal source globs is fine.
Assuming .spago/source-globs
contains src/**/*.purs
, each command below will use
the same input globs:
purs compile src/**/*.purs
purs compile --source-globs .spago/source-globs
purs compile --source-globs .spago/source-globs src/**/*.purs
In the command...
purs compile inputGlob1 inputGlob2 --source-globs-file fileWithMoreGlobs --exclude-files excludeGlob1
the files passed to the compiler are: all the files found by
inputGlob1
, inputGlob2
, and all the globs listed in fileWithMoreGlobs
minus the files found by excludeGlob1
.
This is an automated preview release. Get the latest stable release here.
Bugfixes:
Fix a compilation memory regression for very large files (#4521 by @mjrussell)
When compiling a a very large file (>12K lines) the CSE pass could balloon memory and result in increased compilation times.
This fix uses a strict Map instead of a lazy Map to avoid building up unnecessary thunks during the optimization pass.
Fix two space leaks while compiling many modules (#4517 by @MonoidMusician)
The first would interleave compilation of too many modules at once, which
would increase memory usage, especially for single threaded builds with
+RTS -N1 -RTS
. Now the number of concurrent modules is limited to
the number of threads available to the
GHC runtime system.
The second would hold on to memory from modules that compiled with warnings
until the end of the build when the warnings were printed and the memory freed.
This is now fixed with additional NFData
instances.
This is an automated preview release. Get the latest stable release here.
This is an automated preview release. Get the latest stable release here.
This is an automated preview release. Get the latest stable release here.
New features:
Replace UnusableDeclaration
with updated NoInstanceFound
(#4513 by @JordanMartinez)
Previously, the following type class would be invalid
because there was no way for the compiler to infer
which type class instance to select because
the type variable in the class head a
was
not mentioned in bar
's type signature:
class Foo a where
bar :: Int
The recently-added visible type applications (VTAs) can now be used to guide the compiler in such cases:
class Foo a where bar :: Int
instance Foo String where bar = 0
someInt = bar @String -- use the `String` instance
Without VTAs, the compiler
will still produce an InstanceNotFound
error, but this error
has been updated to note which type variables in the class head
can only be disambiguated via visible type applications.
Given the following code
class Single tyVarDoesNotAppearInBody where
useSingle :: Int
single :: Int
single = useSingle
The error reported for useSingle
will be:
No type class instance was found for
Main.Single t0
The instance head contains unknown type variables.
Note: The following type class members found in the expression require visible type applications
to be unambiguous (e.g. tyClassMember @Int).
Main.useSingle
tyNotAppearInBody
For a multiparameter typeclass with functional dependencies...
class MultiFdBidi a b | a -> b, b -> a where
useMultiFdBidi :: Int
multiFdBidi :: Int
multiFdBidi = useMultiFdBidi
...the "Note" part is updated to read
Note: The following type class members found in the expression require visible type applications
to be unambiguous (e.g. tyClassMember @Int).
Main.useMultiFdBidi
One of the following sets of type variables:
a
b
Bugfixes:
@var
was allowed in type class head (#4523 by @JordanMartinez)This is an automated preview release. Get the latest stable release here.
This is an automated preview release. Get the latest stable release here.