Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,30 @@ on:
pull_request:
branches: [master]

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- uses: purescript-contrib/setup-purescript@main
with:
purescript: "unstable"
- uses: actions/checkout@v6

- uses: actions/setup-node@v2
- uses: actions/setup-node@v6
with:
node-version: "14.x"
node-version: "24"

- name: Install dependencies
run: |
npm install -g bower
npm install
bower install --production
run: npm install

- name: Build source
run: npm run-script build
run: npm run build

- name: Run tests
run: |
bower install
npm run-script test --if-present
run: npm test

- name: Lint
run: npm run lint

- name: Check formatting
run: npm run format:check
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
/.*
!/.gitignore
!/.github/
!/.tidyrc.json
!/.oxfmtrc.json
/bower_components/
/node_modules/
/output/
package-lock.json
/package-lock.json
/spago.lock
3 changes: 3 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"trailingComma": "es5"
}
10 changes: 10 additions & 0 deletions .tidyrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"importSort": "ide",
"importWrap": "source",
"indent": 2,
"operatorsFile": null,
"ribbon": 1,
"typeArrowPlacement": "first",
"unicode": "never",
"width": null
}
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,41 @@ Bugfixes:

Other improvements:

## [v7.0.1](https://github.com/purescript/purescript-parallel/releases/tag/v7.0.1) - 2026-10-17

Other improvements:

- Migrate from Bower/Pulp to Spago and update CI, linting, and formatting (#44 by @thomashoneyman).

## [v7.0.0](https://github.com/purescript/purescript-parallel/releases/tag/v7.0.0) - 2023-08-24

Breaking changes:
- Remove `Monad` and `Applicative` constraints on the `Parallel` class. Both
types now only require `Apply`. (#43 by @artemisSystem)

- Remove `Monad` and `Applicative` constraints on the `Parallel` class. Both
types now only require `Apply`. (#43 by @artemisSystem)

## [v6.0.0](https://github.com/purescript/purescript-parallel/releases/tag/v6.0.0) - 2022-04-27

Breaking changes:

- Update project and deps to PureScript v0.15.0 (#41 by @JordanMartinez)

## [v5.0.0](https://github.com/purescript/purescript-parallel/releases/tag/v5.0.0) - 2021-02-26

Breaking changes:

- Added support for PureScript 0.14 and dropped support for all previous versions (#37)

New features:

- Added instances for `Star` and `Costar` (#28)

Bugfixes:

- Fixed documentation typo: arguement -> argument (#33)

Other improvements:

- Migrated CI to GitHub Actions and updated installation instructions to use Spago (#36)
- Replaced dead URI in tests (#32)
- Added a changelog and pull request template (#37)
Expand Down
34 changes: 0 additions & 34 deletions bower.json

This file was deleted.

16 changes: 10 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{
"private": true,
"scripts": {
"clean": "rimraf output && rimraf .pulp-cache",
"build": "pulp build -- --censor-lib --strict",
"test": "pulp test"
"build": "spago build",
"test": "spago test",
"lint": "oxlint --deny-warnings src test",
"format": "purs-tidy format-in-place src test && oxfmt --write .",
"format:check": "purs-tidy check src test && oxfmt --check ."
},
"devDependencies": {
"pulp": "16.0.0-0",
"purescript-psa": "^0.8.2",
"rimraf": "^2.6.2"
"oxfmt": "^0.73.0",
"oxlint": "^1.88.0",
"purescript": "^0.15.16",
"purs-tidy": "^0.11.1",
"spago": "^1.0.5"
}
}
31 changes: 31 additions & 0 deletions spago.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package:
name: parallel
description: Classes for parallel composition and racing of asynchronous computations.
build:
strict: true
pedanticPackages: true
publish:
version: 7.0.1
license: BSD-3-Clause
location:
githubOwner: purescript
githubRepo: purescript-parallel
dependencies:
- control: ">=6.0.0 <7.0.0"
- effect: ">=4.0.0 <5.0.0"
- either: ">=6.0.0 <7.0.0"
- foldable-traversable: ">=6.0.0 <7.0.0"
- functors: ">=5.0.0 <6.0.0"
- maybe: ">=6.0.0 <7.0.0"
- newtype: ">=5.0.0 <6.0.0"
- prelude: ">=6.0.0 <7.0.0"
- profunctor: ">=6.0.0 <7.0.0"
- refs: ">=6.0.0 <7.0.0"
- transformers: ">=6.0.0 <7.0.0"
test:
main: Test.Main
strict: true
pedanticPackages: true
dependencies:
- console: ">=6.0.0 <7.0.0"
workspace: {}
13 changes: 6 additions & 7 deletions src/Control/Parallel.purs
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,18 @@ module Control.Parallel
import Prelude

import Control.Alternative (class Alternative)
import Control.Parallel.Class (class Parallel, parallel, sequential, ParCont(..))

import Data.Foldable (class Foldable, traverse_, oneOfMap)
import Control.Parallel.Class (class Parallel, ParCont(..), parallel, sequential)
import Data.Foldable (class Foldable, oneOfMap, traverse_)
import Data.Traversable (class Traversable, traverse)

-- | Apply a function to an argument under a type constructor in parallel.
parApply
:: forall f m a b
. Parallel f m
=> m (a -> b)
-> m a
-> m b
parApply mf ma = sequential(apply (parallel mf) (parallel ma))
=> m (a -> b)
-> m a
-> m b
parApply mf ma = sequential (apply (parallel mf) (parallel ma))

-- | Traverse a collection in parallel.
parTraverse
Expand Down
24 changes: 12 additions & 12 deletions src/Control/Parallel/Class.purs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import Control.Alternative (class Alternative)
import Control.Monad.Cont.Trans (ContT(..), runContT)
import Control.Monad.Except.Trans (ExceptT(..))
import Control.Monad.Maybe.Trans (MaybeT(..))
import Control.Monad.Reader.Trans (mapReaderT, ReaderT)
import Control.Monad.Writer.Trans (mapWriterT, WriterT)
import Control.Monad.Reader.Trans (ReaderT, mapReaderT)
import Control.Monad.Writer.Trans (WriterT, mapWriterT)
import Control.Plus (class Plus)
import Data.Either (Either)
import Data.Functor.Compose (Compose(..))
Expand Down Expand Up @@ -99,19 +99,19 @@ instance altParCont :: MonadEffect m => Alt (ParCont m) where

runContT c1 \a -> do
b <- liftEffect (Ref.read done)
if b
then pure unit
else do
liftEffect (Ref.write true done)
k a
if b then
pure unit
else do
liftEffect (Ref.write true done)
k a

runContT c2 \a -> do
b <- liftEffect (Ref.read done)
if b
then pure unit
else do
liftEffect (Ref.write true done)
k a
if b then
pure unit
else do
liftEffect (Ref.write true done)
k a

instance plusParCont :: MonadEffect m => Plus (ParCont m) where
empty = ParCont $ ContT \_ -> pure unit
Expand Down
28 changes: 15 additions & 13 deletions test/Main.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
import http from "http";

export function getImpl(opts) {
return function(done) {
return function() {
http.request(opts, function(res) {
var body = '';
res.setEncoding('utf8');
res.on('data', function (s) {
body += s;
});
res.on('end', function () {
done(body)();
});
}).end();
};
return function (done) {
return function () {
http
.request(opts, function (res) {
var body = "";
res.setEncoding("utf8");
res.on("data", function (s) {
body += s;
});
res.on("end", function () {
done(body)();
});
})
.end();
};
};
}
12 changes: 6 additions & 6 deletions test/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ request host = Request { host: host, path: "/" }
main :: Effect Unit
main = runContT (parTraverse (get <<< request) resources) logShow
where
resources :: Array String
resources =
[ "www.purescript.org"
, "try.purescript.org"
, "discourse.purescript.org"
]
resources :: Array String
resources =
[ "www.purescript.org"
, "try.purescript.org"
, "discourse.purescript.org"
]
Loading