/awesome-purescript

A collection of awesome Purescript libraries, resources and shiny things.

MIT LicenseMIT

Awesome Purescript《ミ》Awesome

A collection of awesome Purescript libraries, resources and shiny things.

Contents

Essential tools

  • purs - the compiler.
  • spago - package manager and build tool.
  • esbuild - JavaScript bundler used by spago.
  • purs-tidy - Purescript code formatter.
  • purescript-backend-optimizer - A tool to optimize JS genererated code.

Essential libraries

  • prelude - The basic prelude.
  • effect - Native side effects (equivalent to IO in Haskell).
  • aff - Asynchronous effects.
  • maybe - Optional values.
  • either - Commonly used for error handling.
  • arrays - JavaScript arrays.
  • transformers - Monad transnformers ReaderT, StateT, MaybeT, etc (equivalent to mtl in Haskell).
  • exists - Encodes existential types.

Data types

  • ordered-collections - Ordered Maps and Sets.
  • unordered-collections - Hash-based immutable Maps and Sets.
  • lists - Linked lists.
  • fast-vect - Fast, type-safe vector libary for Purescript inspired by Idris. A vector is list with its size encoded in the type.
  • tree-rose - Tree zippers.
  • 📀 record-studio - Working with records made easy.
  • 🎄 yoga-tree - A data type for representing trees with arbitrary number of children and handy zippers.
  • 🕉️ yoga-om - A powerful general purpose type for writing applications. Includes dependency injection via Reader, error Variants and of course Aff.
  • 💍 untagged-union - A data type for untagged unions.
  • 🔑 vault - A typed, persistent store for values of arbitrary types. This is a port of the Haskell Vault library by Heinrich Apfelmus.
  • ❄️ unique - Abstract unique objects.

Maths

  • js-bigints - FFI bindings for JavaScript's BigInt. Does not require external js libraries.
  • rationals - Rational numbers.

Random

  • random - A basic library to generate random numbers.
  • gen - A type class for random generator implementations.
  • generate-values - An instance for gen and additional functions.

Lenses

  • profunctor-lenses - A mechanism for updating, viewing, and setting values within nested data structures.
  • barlow-lens - Barlow lens makes creating complex lenses such as record lenses super simple.
  • tidy-codegen-lens - Generate lenses and prisms for your data types automatically.

Http

Http client

  • fetch - High-level library for the WHATWG Fetch Living Standard.

Http server

  • httpurple - A functional http server with a focus on type-safety and making the common case easy.

Http routing

  • routing-duplex - Simple bidirectional parser/printers for your routing data types.

GraphQL

Json

  • yoga-json - Light-weight Json parser.
  • argonaut - A collection of libraries for working with JSON in PureScript.
  • json-codecs - A bidirectional and unidirectional value-based and runtime-configurable typeclass-based JSON codec library.

UI

React

Halogen

  • halogen - A declarative, component-based library entirely written in purescript.

Elmish

  • elmish - An ELM inspired framework (TEA) built on react.

Deku

  • deku - A FRP web framework for apps that need to be fast. Have a nice documentation.

Web

CSS

  • tecton - Domain-specific language for authoring CSS.

Collaborative editing

  • yjs - Purescript FFI bindings for yjs.
  • 🚰 tiptap - Purescript FFI bindings for tiptap.

Databases

Testing

  • spec - A testing framework, inspired by hspec.
  • quickcheck - An implementation of QuickCheck in PureScript.
  • assert - Basic assertions library for low level testing.

Benchmark

  • minibench - A minimal benchmarking library.

FFI

  • 🦥 lazy-joe - Purescript ffi for the lazy joe.
  • js-objects - Access js object methods and properties without writing JS bindings.

IDEs

Organisations

The following organisations are the best entry points when looking for libraries (many of the libraries in this list come from these orgs):