Purescript Versions Save

A strongly-typed language that compiles to JavaScript

v0.15.16-0

1 month ago

This is an automated preview release. Get the latest stable release here.

v0.15.15

2 months ago

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.

v0.15.15-0

2 months ago

This is an automated preview release. Get the latest stable release here.

v0.15.14

3 months ago

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.

v0.15.14-2

4 months ago

This is an automated preview release. Get the latest stable release here.

v0.15.14-1

4 months ago

This is an automated preview release. Get the latest stable release here.

v0.15.14-0

5 months ago

This is an automated preview release. Get the latest stable release here.

v0.15.13

5 months ago

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:

  • Fix parsing bug where @var was allowed in type class head (#4523 by @JordanMartinez)

v0.15.13-1

5 months ago

This is an automated preview release. Get the latest stable release here.

v0.15.13-0

5 months ago

This is an automated preview release. Get the latest stable release here.