Package

purescript-node-workerbees

Repository
natefaubion/purescript-node-workerbees
License
MIT
Uploaded by
pacchettibotti
Published on
2025-02-14T14:46:46Z

An opinionated, unsafe set of bindings to Node's worker_threads API. Use workerbees to distribute work over multiple actual threads instead of that fiber bullshit Aff gives you.

Also, there's has an Aff-based API that makes it even more convenient.

Example

Start by creating a worker module:

module Worker where

import Prelude

import Effect (Effect)
import Node.WorkerBees as Worker

main :: Effect Unit
main = Worker.makeAsMain (Worker.lift doSomethingReallyExpensive)
  where
  doSomethingReallyExpensive :: Int -> String
  doSomethingReallyExpensive = ???

Then bundle your worker with spago:

spago bundle --bundle-type app --module Worker --outfile worker.js --platform node

Write your main module:

import Prelude

import Data.Array as Array
import Effect (Effect)
import Effect.Aff as Aff
import Effect.Class.Console as Console
import Node.WorkerBees (Worker)
import Node.WorkerBees as Worker
import Node.WorkerBees.Aff.Pool as WorkerPool

main :: Effect Unit
main = Aff.launchAff_ do
  let
    worker :: Worker Unit
    worker = Worker.unsafeWorkerFromPath "./worker.js"

  -- Distributes work over 4 threads.
  res <- WorkerPool.poolTraverse worker unit 4 (Array.range 1 100)
  Console.logShow res

Run your main module:

spago run
Modules
Node.WorkerBees
Node.WorkerBees.Aff
Node.WorkerBees.Aff.Pool
Dependencies