Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


A strongly-typed language that compiles to Javascript

Subscribe to updates I use purescript

Statistics on purescript

Number of watchers on Github 4550
Number of open issues 219
Average time to close an issue 5 days
Main language Haskell
Average time to merge a PR 2 days
Open pull requests 122+
Closed pull requests 61+
Last commit about 2 years ago
Repo Created over 6 years ago
Repo Last Updated about 2 years ago
Size 9.16 MB
Homepage http://purescript...
Organization / Authorpurescript
Latest Releasev0.11.7
Page Updated
Do you use purescript? Leave a review!
View open issues (219)
View purescript activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating purescript for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


A small strongly typed programming language with expressive types that compiles to JavaScript, written in and inspired by Haskell.

Hackage Build Status

Language info



purescript open issues Ask a question     (View All Issues)
  • over 3 years Packaging, Plans and package-sets
  • over 3 years Noticed a strange pretty printing of forall
  • over 3 years Allow `Newtype` deriving for newtypes that use type synonyms
  • over 3 years case expression with ADTs has horrible compiler performance
  • over 3 years Explicit module imports and --dump-corefn
  • over 3 years Test suite should use latest versions of core libraries
  • over 3 years Derived newtype instances can give wrong superclass through entailment
  • over 3 years Performance regression since 0.10.1
  • over 3 years Functional dependencies do not propagate to subclasses
  • over 3 years Functional dependencies can make instances unusable
  • over 3 years Allow operator aliases for type classes
  • over 3 years Derived Newtype instances should use TypeEquals where necessary
  • over 3 years Add error message for ambiguous type variables in inferred contexts
  • over 3 years [psc-ide] Show operators for functions
  • over 3 years Warn when recursive functions cannot be optimized
  • over 3 years Unnecessary import warning includes all data constructors in suggestion
  • over 3 years Solve the IsSymbol constraint automatically
  • over 3 years [psc-ide] Find usages
  • over 3 years [psc-ide] Collect instances for a typeclass
  • over 3 years [psc-ide] Collect docstrings for identifiers
  • over 3 years Inlining
  • over 3 years Cannot use relative `require` inside of an FFI file
  • over 3 years Single consolidated executable
  • over 3 years Instance chains
  • over 3 years Restrict unification to monotypes
  • over 3 years Remove duplicate rows restriction
  • over 3 years Improve skolem escape check
  • over 3 years Compiler should persist warnings
  • over 3 years Special syntax for unsigned literals
  • over 3 years Make filename, line number and compiler version available during compilation
purescript open pull requests (View All Pulls)
  • refactor PSCi code
  • [WIP] Adds psc-ide to the project
  • Eq and Ord deriving
  • Infer types in psc-{docs,publish}
  • #1846, start work on '_ - 1' syntax for sections
  • Resolve #1787. Better error when let is at end of file, and missing `in`
  • Remove meet judgment, #1719
  • etags format fix
  • Add Source Map support.
  • Make `let` optional in psci
  • Check that FFI imports match with implementations
  • Improve error message formatting for tool interop
  • Core imperative representation
  • Revise class constructor/accessor representation
  • Fix #1916
  • Unset bindings in psci
  • Upgrade optparse-applicative to >= 0.12.1 for all executables.
  • Use generic Literal in the AST
  • Infer types with class constraints (work in progress)
  • Fix indentation bug #1881
  • Language/PureScript/Ide/Types.hs: fix haddock markup
  • Add library-only flag to the cabal manifest
  • Remove qualified keyword
  • Remove --require-path completely
  • #1712, fast recompilation in psc-ide-server
  • Fix indentation bug #1881
  • Update for names in new prelude
  • NoImplicitPrelude, enable some global extensions
  • Separate the `Op` and `Ident` namespaces, add phantom type for `Op` for values/types
  • PSCi speed improvements and design changes
  • Cache last rebuild
  • marking code in error messages with backticks
  • Optimize pass-through cases
  • Work in progress: parse module header
  • Use (..) for data constructors in suggestion
  • Constraint Kinds
  • Fix #2070, typed hole errors now include environment information
  • Name resolving
  • Bundle and optimize
  • Bundle and optimize
  • [psc-ide] Parse Modules
  • [psc-ide] protolude
  • Elaborate re-exports
  • [psc-ide] multi phase load
  • [psc-ide] Goto definition
  • Typeclass codegen
  • Evaluate PSCi expressions in the browser
  • Similarlity score for types in hole errors
  • Improved error messages in the constraint solver
  • protolude 0.1.6: fix ambiguous occurrences
  • Bundle and optimize
  • remove legacy ObjectGetter and update doc
  • gitignore core-tests/.psc-ide-port
  • Do not solve for unknowns in rows during instance solving
  • [WIP][psc-ide] Force computations in worker threads
  • Added typelevel string functions
  • Unify types during instance solving
  • Add --dump-corefn command line option
  • Allow anonymous accessor chains (_.a.b)
  • Fix weird parser issue identified by @FrigoEU
  • display error hint. Fixes #2250
  • Fix scope traversal for do-notation bind.
  • Allow symbols in data contructors
  • Small cleanup to Language.PureScript.Interactive.IO
  • Pretty-print suggested types differently
  • Better error messages for bad indentation
  • Instantiate polymorphic types in record literals
  • Add paste mode, remove --multi-line option, fix #934
  • Derive Data.Generic.Rep.Generic
  • Type directed search
  • Basic sketch of psc-package
  • Support record updates on records with field named hasOwnProperty
  • Create documentation for psc-package
  • [WIP] Use Text over String
  • [WIP][psc-ide] Force polling option for psc-ide-server
  • Change NullBinder serialization to simplify parsing
  • [WIP][psc-ide] Show operators in completions for their alias
  • fixes #2434 and #2438: PureScript chars must be UTF-16 code units
  • Add support for rows in instance head under fundeps
  • [DO NOT MERGE] :info functionality for psci
  • Bump stack lts version
  • [psc-ide] Complete record accessors
  • Store more information in RenderedCode / refactoring
  • Better variable naming hygiene in TCO. Fixes #2868
  • Allow aeson 1.1
  • Disallow invalid newtype-derived instances
  • Switch test suite to use tasty
  • Add proxies
  • Eq1 & Ord1 deriving
  • Typed CoreFn WIP
  • [WIP] Annotations for ASTs
  • [WIP] InstanceSigs
  • Filter out 'unsafeCoerce' from type hole suggestions
  • [WIP][purs ide] Groups reexports in completions
  • Disallow `forall` within constraints (#2874)
  • Add applicative do notation
  • optimize away binds to wildcards in Do notation
  • Optimize inferred partial constraint fn
  • Check warnings/errors for positions
  • Allow pattern matches with guards
  • Rename prim classes
  • Check that instance declarations don't overlap
  • Option --dump-coreimp to output imperative-core to JSON
  • REPL fixes needed for Eff change
  • [WIP] Default method implementations
  • Type-level naturals
  • Allow operators shadowed by variables of the same name as the alias
  • Efficient object updates for closed records
  • Build psciEnvironment as needed for :print
  • Introduces HasName class to reduce some duplication
  • Complete type identifiers following '::' in REPL
  • Complete any number of words after :kind and :type in REPL
  • Complete after parens and brackets in REPL
  • Make REPL completion tests faster
  • Improve parse error messages for .purs-repl
  • Fix :browse Prim, it has no ExternsFile (Fix #2672)
  • Fix ScopeConflict error to include positions
  • [WIP] Fix kind error with missing span
  • Smarter make
  • Makefiles make things easier for new and regular contributors alike
  • Prevent codegen when `--dump-corefn` is supplied
  • Fix for Issue 3247: Handle exported modules when :browse comman…
purescript questions on Stackoverflow (View All Questions)
  • Testing purescript functions in jsPerf
  • Manipulating Free Monads in Purescript
  • purescript type signature fails to compile, code works fine without; suggested signature not working
  • Are constraints possible for new types in Purescript?
  • How do I convert a list of chars to a string in purescript
  • Mysterious syntax error converting a D3 vis from Javascript to Purescript
  • Use purescript-halogen (with pulp)
  • how to componentize purescript-halogen application
  • Polymorphic instruction in Free Monad in Purescript
  • Mutating state in Purescript
  • Purescript plugin system
  • How can I build a PureScript (*.purs) compiler for MeteorJS?
  • Automatically focus input element after creation in purescript-halogen
  • making purescript-blaze and purescript-jquery work together
  • Trying to use Cons function in Purescript
  • How to combine StringParser with ParserT in Purescript?
  • How do I create a foreign constant in PureScript?
  • How to use setTimeout in PureScript v0.7
  • How can I write a purescript effect handler that subracts an effect from the set
  • How to structure app in purescript
  • Purescript - Cannot unify type
  • Is the Eff-monad in purescript inspired by www.eff-lang.org?
  • Is tacit programming possible in Purescript?
  • What does the triple less-than sign (`<<<`) do in PureScript?
  • How do I combine effectful event handlers and custom EventUpdates in purescript-halogen?
  • PureScript type system name
  • Reader Monad in Purescript
  • loading external javascript file in purescript
  • Type issues with anonymous functions in Purescript
  • Getting started with purescript
purescript list of languages used
purescript latest release notes
v0.11.7 v0.11.7


  • Add position to type class declaration errors (@b123400)
  • Add valid location list to orphan instance errors (@i-am-tom)
  • Expand error message for UnusableDeclaration (#3088, @i-am-tom)
  • Inline Unsafe.Coerce.unsafeCoerce (@coot)

Bug Fixes

  • Correctly quote uppercased field labels in errors (@Thimoteus)
  • purs ide inserts conflicting imports for types (#3131, @nwolverson)
  • Instantiate abstraction body during inference to fix a type checking bug (@LiamGoodacre)
  • Fix a bug related to the desugaring of nested parentheses (@MonoidMusician)
  • Fix a loop in the kind checker (@paf31)
  • Fix a bug in type operator precedence parsing (@paf31)
  • Eliminate some redundant whitespace in the generated JS output (@matthewleon)
  • Only add newline before initial group of comment lines during code generation (@brandonhamilton)
  • Treat kinds as used in import warnings (@nwolverson)

purs ide

  • Add an editor mode (@kRITZCREEK)

When the editor-mode flag is specified at startup the server will not start afile watcher process any more. Instead it only reloads after successful rebuild commands. This is a lot less fragile than relying on the file system APIs, but will mean that a manual load needs to be triggered after builds that didn't go through purs ide.

  • purs ide now groups hiding imports with implicit ones (@kRITZCREEK)
  • Return documentation comments in purs ide completions (@nwolverson)
  • Add an actualFile parameter to the rebuild command (@kRITZCREEK)
  • Add qualified explicit import (@nwolverson)
  • Fixed case-splitting on local non-exported datatypes (@LightAndLight)
  • Make the filters parameter in the type command optional (@b123400)

purs docs

  • Embed CSS for HTML docs (@hdgarrood)
  • Fix source links for re-exports (@felixSchl)
  • Use order given in export list in generated docs (@hdgarrood)
  • Prevent browser from treating the title and source link as one word (@Rufflewind)
  • Fix fragment links to type constructors in HTML (@hdgarrood)

purs repl

  • Add :complete directive to purs repl to support completion in more editors (@actionshrimp)


  • Add docs for duplicate labels in record types (@paf31)
  • Adds a document for the design of purs ide. (@kRITZCREEK)
  • Update PROTOCOL.md docs for purs ide (@BjornMelgaard)
  • Upgrade to GHC version 8.2 (@kRITZCREEK)
  • Allow blaze-html-0.9 (@felixonmars)
  • Bump Glob dependency (@mjhoy)
  • Use Hspec in TestDocs (@hdgarrood)
  • Fix AppVeyor deployment (#2774) (@hdgarrood)
  • Various type safety improvements to the AST (@kRITZCREEK)
  • Remove some references to old executables (@hdgarrood)
  • Update the installation documentation (@hdgarrood)
  • Update test dependencies (@hdgarrood)
  • Only build master and versioned tags in AppVeyor (@hdgarrood)
v0.11.6 v0.11.6

New Features

RowToList support


There is a new type class in typelevel-prelude called RowToList, which turns a row of types into a type-level list. This allows us to work with closed rows in more ways at the type level. The compiler will now solve these constraints automatically for closed rows of types.


  • Allow things to be hidden from Prim (@garyb)
  • Re-evaluate REPL globs on :reload (@hdgarrood)
  • Include comments in child declarations in HTML docs (@hdgarrood)

IDE Enhancements

  • Collect data constructors (@kRITZCREEK)
  • Adds declarations for Prim (@kRITZCREEK)
  • Repopulates the rebuild cache when populating volatile state (@kRITZCREEK)
  • Add declaration type filter (#2924) (@sectore)
  • Improve reexport bundling (@kRITZCREEK)
  • Resolve synonyms and kinds (@kRITZCREEK)

Bug Fixes

  • Replace synonyms in instance constraints (@LiamGoodacre)
  • Encode PSCI's server content as UTF-8 string (@dgendill)
  • Fix child declaration ordering in docs (@hdgarrood)
  • Improve instance ordering in HTML docs (@hdgarrood)
  • Fix links to type operators in HTML docs (@hdgarrood)


  • Add source span annotations to Declaration (@garyb)
  • Add source span annotations to DeclarationRef (@garyb)
  • Remove purescript.cabal and add to .gitignore (@garyb)
  • Raise upper bound on aeson in package.yaml (@garyb)
  • Only build master and semver tags in Travis (@hdgarrood)
v0.11.5 v0.11.5



Type signatures in instances


Type class instances can now include type signatures for class members, as documentation:

data MyType = MyType String

instance showMyType :: Show MyType where
  show :: MyType -> String
  show (MyType s) = "(MyType " <> show s <> ")"

Bug Fixes

  • Encode HTML content as UTF8 when using purs repl with --port (@dgendill)
  • Disallow some invalid newtype-derived instances (@paf31)
  • Disallow forall within constraints (#2874, @sectore)
  • Convert \r\n into \n after reading files (@kRITZCREEK)
  • Fix PSCi tests (@kRITZCREEK)
  • Better variable naming hygiene in TCO. (#2868, @houli)
  • Simplify TCO generated code (@matthewleon)
  • Remove newlines from printed custom type errors (@matthewleon)
  • Fix some purs command line help message issues (@Cmdv)
  • Apply relative paths during pretty printing of errors (@kRITZCREEK)
  • Desugar let properly when generating docs (@paf31)
  • Fix kind signature for RowCons type class in documentation (@tslawler)
  • Fix an issue with error messages for TypesDoNotUnify involving duplicate labels (#2820, @thoradam)


  • Update package.yaml (@sol)
  • Parse support modules from actual test support purs (@noraesae)
  • Update build command to run tests (@sectore)
  • Bumps lower bound for directory (@kRITZCREEK)
  • Switch core-tests to psc-package (#2830, @matthewleon)
  • Small fix for the copyright dates (@seanwestfall)
  • Update CONTRIBUTING.md for new contributor label (@thoradam)

purs ide


  • Add a new namespace filter (#2792, @sectore, @stefanholzmueller)

A new filter, which restricts query results to the value, type and/or kind namespaces, which allows improvements to the completion and import commands.

  • Adds a command to add qualified imports (@kRITZCREEK)

This empowers editor plugins to add imports for qualified identifiers, for example in the Emacs plugin.

  • New import formatting (@kRITZCREEK)
  • Group reexports in completions (@kRITZCREEK)

Editors can now choose to let purs ide group reexports for the same value, to reduce noise when completing values like Data.Functor.map which are reexported a lot and show up that many times in the completion list.


  • Parse modules in parallel (@kRITZCREEK)

This can yield significant speedups in the initial load times. For example a full load of slamdata/slamdata improves from 11 to 6 seconds

  • Introduce completion options (@kRITZCREEK)

Bug Fixes

  • Resolve synonyms and kinds (@kRITZCREEK)
  • Work around laziness when measuring command performance (@kRITZCREEK)
  • Simplify state type (@kRITZCREEK)
  • Extract namespace ADT (@kRITZCREEK)
  • Decodes source files as UTF8 when parsing out the imports (@kRITZCREEK)
  • Fix the import command for kinds (@kRITZCREEK)
  • Reads files in text mode for adding imports (@kRITZCREEK)
  • Add -h/--help to ide subcommands (@simonyangme)
Other projects in Haskell