Measures Concepts
GitHub icon

PureScript

PureScript - Programming language

< >

PureScript is an open source programming language created in 2013 by Phil Freeman.

Source code:
git clone https://github.com/purescript/purescript
#137on PLDB 11Years Old 5kRepos

Try now: TIO

A strongly-typed language that compiles to JavaScript


Example from the web:
import Prelude import Effect.Console (log) greet :: String -> String greet name = "Hello, " <> name <> "!" main = log (greet "World")
Example from hello-world:
module Main where import Debug.Trace main = trace "Hello World"
Example from Linguist:
module Control.Arrow where import Data.Tuple class Arrow a where arr :: forall b c. (b -> c) -> a b c first :: forall b c d. a b c -> a (Tuple b d) (Tuple c d) instance arrowFunction :: Arrow (->) where arr f = f first f (Tuple b d) = Tuple (f b) d second :: forall a b c d. (Category a, Arrow a) => a b c -> a (Tuple d b) (Tuple d c) second f = arr swap >>> first f >>> arr swap swap :: forall a b. Tuple a b -> Tuple b a swap (Tuple x y) = Tuple y x infixr 3 *** infixr 3 &&& (***) :: forall a b b' c c'. (Category a, Arrow a) => a b c -> a b' c' -> a (Tuple b b') (Tuple c c') (***) f g = first f >>> second g (&&&) :: forall a b b' c c'. (Category a, Arrow a) => a b c -> a b c' -> a b (Tuple c c') (&&&) f g = arr (\b -> Tuple b b) >>> (f *** g) class ArrowZero a where zeroArrow :: forall b c. a b c infixr 5 <+> class ArrowPlus a where (<+>) :: forall b c. a b c -> a b c -> a b c

Language features

Feature Supported Token Example
Strings ✓ "
"Hello world"
MultiLine Comments ✓ {- -}
{- A comment
-}
Line Comments ✓ --
-- A comment
Semantic Indentation ✓
-- https://github.com/purescript/documentation/blob/master/language/Syntax.md
-- Syntax is whitespace sensitive. The general rule of thumb is that declarations which span multiple lines should be indented past the column on which they were first defined on their subsequent lines.
foo = bar +
 baz
Doc comments ✓
-- https://github.com/purescript/documentation/blob/master/language/Syntax.md
-- | `bool` performs case analysis for the `Boolean` data type, like an `if` statement.
bool :: forall a. Boolean -> a -> a -> a
bool true x _ = x
bool false _ x = x
Comments ✓

HackerNews discussions of PureScript

title date score comments
Show HN: PureScript - a functional language which compiles to Javascript 10/31/2013 2 0

View source

- Build the next great programming language · Search · Add Language · Features · Creators · Resources · About · Blog · Acknowledgements · Queries · Stats · Sponsor · Day 605 · feedback@pldb.io · Logout