diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06220d63..65d149db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: key: ${{ runner.os }}-stack-${{ hashFiles('stack.yaml.lock') }}-${{ hashFiles('trypurescript.cabal') }} - name: Build server code - run: stack --no-terminal -j1 build + run: stack --no-terminal build - name: Build server assets if: github.event_name == 'release' @@ -62,7 +62,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "22" - name: Build client code run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 74fcf8e1..c1fb7a0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ New features: Bugfixes: Other improvements: +- Update the PureScript compiler to [0.15.16](https://github.com/purescript/purescript/releases/tag/v0.15.16) and the package set to `psc-0.15.15-20260701` (#320 by @thomashoneyman) + - Since 0.15.16 was not published to Hackage, `stack.yaml` now pins the `v0.15.16` release tag on GitHub instead of a Hackage version. +- Modernize the Haskell toolchain from Stackage `lts-20.9` (GHC 9.2.5) to `lts-23.18` (GHC 9.8.4), matching the upstream `purescript` repository (#320 by @thomashoneyman) +- Modernize the server for scotty 0.22 and GHC 9.8, build with `-Wall`, prune unused dependencies, and update the cabal file to `cabal-version: 2.4` (#320 by @thomashoneyman) +- Update the CI client build to Node 22, as Node 20 reached end of life in April 2026 (#320 by @thomashoneyman) +- Raise the server's RTS heap cap from 3G to 6G to accommodate the larger package set; deploying this requires resizing the try.purescript.org droplet beyond 4GB of RAM (#320 by @thomashoneyman) ## [v2026-07-03.1](https://github.com/purescript/trypurescript/releases/tag/v2026-07-03.1) diff --git a/Setup.hs b/Setup.hs deleted file mode 100644 index 9a994af6..00000000 --- a/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/client/package.json b/client/package.json index 1e937d81..9403cae0 100644 --- a/client/package.json +++ b/client/package.json @@ -16,7 +16,7 @@ "devDependencies": { "esbuild": "^0.14.43", "http-server": "^14.1.0", - "purescript": "^0.15.2", + "purescript": "^0.15.16", "purescript-psa": "^0.8.2", "rimraf": "^2.5.4", "spago": "^0.20.9" diff --git a/client/src/Try/SharedConfig.purs b/client/src/Try/SharedConfig.purs index 257f6f73..40363f67 100644 --- a/client/src/Try/SharedConfig.purs +++ b/client/src/Try/SharedConfig.purs @@ -6,13 +6,13 @@ module Try.SharedConfig where import Prelude pursVersion :: String -pursVersion = "v0.15.13" +pursVersion = "v0.15.16" pursReleaseUrl :: String pursReleaseUrl = "https://github.com/purescript/purescript/releases/tag/" <> pursVersion packageSetVersion :: String -packageSetVersion = "0.15.13-20231219" +packageSetVersion = "0.15.15-20260701" packageSetPackageJsonUrl :: String packageSetPackageJsonUrl = "https://github.com/purescript/package-sets/blob/psc-" <> packageSetVersion <> "/packages.json" diff --git a/client/updateSharedConfigVersions.mjs b/client/updateSharedConfigVersions.mjs index 639173f3..b4b07bfb 100755 --- a/client/updateSharedConfigVersions.mjs +++ b/client/updateSharedConfigVersions.mjs @@ -19,15 +19,23 @@ const stagingPackagesDhallPath = path.join("..", "staging", "packages.dhall"); const stackYamlContent = fs.readFileSync(stackYamlPath, "utf-8"); const packagesContent = fs.readFileSync(stagingPackagesDhallPath, "utf-8"); -const pursVersion = stackYamlContent.split("\n") - .reduce((acc, nextLine) => { - if (acc.found) return acc; - const matchResult = nextLine.match(/ +- purescript-(.+)/); - return matchResult - ? { found: true, value: matchResult[1] } - : acc; - }, { found: false }) - .value; +// The `purescript` extra-dep is either a Hackage dependency, e.g. +// - purescript-0.15.13 +// or a GitHub dependency pinned to a release tag, e.g. +// - github: purescript/purescript +// commit: v0.15.16 +const pursVersion = (() => { + const lines = stackYamlContent.split("\n"); + for (let i = 0; i < lines.length; i++) { + const hackageMatch = lines[i].match(/ +- purescript-(.+)/); + if (hackageMatch) return hackageMatch[1]; + if (/ +- github: purescript\/purescript\s*$/.test(lines[i])) { + const commitMatch = (lines[i + 1] ?? "").match(/ +commit: v(.+)/); + if (commitMatch) return commitMatch[1]; + } + } + return undefined; +})(); const packageSetVersion = packagesContent .match(/https:\/\/github.com\/purescript\/package-sets\/releases\/download\/psc-([^\/]+)\/packages.dhall/)[1]; diff --git a/deploy/start b/deploy/start index 0b4815d4..26fb4e49 100755 --- a/deploy/start +++ b/deploy/start @@ -4,4 +4,7 @@ set -ex set -o noglob export XDG_CACHE_HOME="$PWD/.spago-cache" spago install -exec trypurescript +RTS -N2 -A128m -M3G -RTS 8081 $(spago sources) +# Note: the heap cap below must fit within the droplet's RAM; the package set +# as of psc-0.15.15-20260701 (641 packages) needs more than the 3G that +# sufficed for psc-0.15.13-20231219 (459 packages). +exec trypurescript +RTS -N2 -A128m -M6G -RTS 8081 $(spago sources) diff --git a/server/Main.hs b/server/Main.hs index fdbbb748..9ac7ed55 100644 --- a/server/Main.hs +++ b/server/Main.hs @@ -6,26 +6,20 @@ module Main (main) where -import Control.Monad (unless, foldM) -import Control.Monad.Error.Class (throwError) -import Control.Monad.IO.Class (liftIO) -import Control.Monad.Logger (runLogger') +import Control.Monad (foldM) import qualified Control.Monad.State as State import Control.Monad.Trans (lift) import Control.Monad.Trans.Except (ExceptT(..), runExceptT) -import Control.Monad.Trans.Reader (runReaderT) import Control.Monad.Writer.Strict (runWriterT) import qualified Data.Aeson as A import Data.Aeson ((.=)) -import Data.Bifunctor (first, second, bimap) +import Data.Bifunctor (second, bimap) import qualified Data.ByteString.Lazy as BL -import Data.Default (def) import Data.Function (on) import qualified Data.IORef as IORef import Data.List (nubBy) import qualified Data.List.NonEmpty as NE import qualified Data.Map as M -import Data.Set (Set) import qualified Data.Set as Set import Data.Text (Text) import qualified Data.Text as T @@ -50,6 +44,7 @@ import System.Environment (getArgs) import System.Exit (exitFailure) import System.FilePath.Glob (glob) import qualified System.IO as IO +import Text.Read (readMaybe) import Web.Scotty import qualified Web.Scotty as Scotty @@ -162,7 +157,7 @@ server allModuleNames externs initNamesEnv initEnv port = do post "/compile" $ do code <- T.decodeUtf8 . BL.toStrict <$> body - response <- lift $ compile code + response <- liftIO $ compile code Scotty.setHeader "Access-Control-Allow-Origin" "*" case response of Left err -> @@ -171,7 +166,7 @@ server allModuleNames externs initNamesEnv initEnv port = do Scotty.json $ A.object [ "js" .= comp, "warnings" .= warnings ] get "/search" $ do - query <- param "q" + query <- queryParam "q" Scotty.setHeader "Access-Control-Allow-Origin" "*" Scotty.setHeader "Content-Type" "application/json" case tryParseType query of @@ -191,7 +186,7 @@ server allModuleNames externs initNamesEnv initEnv port = do ] getOpts :: Int -> Scotty.Options -getOpts port = def +getOpts port = Scotty.defaultOptions { settings = Warp.setHost "127.0.0.1" $ Warp.setPort port @@ -204,9 +199,9 @@ lookupAllConstructors env = P.everywhereOnTypesM $ \case other -> pure other where lookupConstructor :: P.Environment -> P.ProperName 'P.TypeName -> [P.Qualified (P.ProperName 'P.TypeName)] - lookupConstructor env nm = + lookupConstructor env' nm = [ q - | (q@(P.Qualified (N.ByModuleName _) thisNm), _) <- M.toList (P.types env) + | (q@(P.Qualified (N.ByModuleName _) thisNm), _) <- M.toList (P.types env') , thisNm == nm ] @@ -216,15 +211,15 @@ lookupAllConstructors env = P.everywhereOnTypesM $ \case replaceTypeVariablesAndDesugar :: (Text -> Int -> P.SourceType) -> P.SourceType -> P.SourceType replaceTypeVariablesAndDesugar f ty = State.evalState (P.everywhereOnTypesM go ty) (0, M.empty) where go = \case - P.ParensInType _ ty -> pure ty + P.ParensInType _ inner -> pure inner P.TypeVar _ s -> do - (next, m) <- State.get + (n, m) <- State.get case M.lookup s m of Nothing -> do - let ty = f s next - State.put (next + 1, M.insert s ty m) - pure ty - Just ty -> pure ty + let unknown = f s n + State.put (n + 1, M.insert s unknown m) + pure unknown + Just unknown -> pure unknown other -> pure other tryParseType :: Text -> Maybe P.SourceType @@ -242,16 +237,24 @@ main :: IO () main = do -- Stop mangled "Compiling ModuleName" text IO.hSetBuffering IO.stderr IO.LineBuffering - (portString : inputGlobs) <- getArgs - let port = read portString - inputFiles <- concat <$> traverse glob inputGlobs - e <- runExceptT $ do - modules <- ExceptT $ I.loadAllModules inputFiles - (exts, env) <- ExceptT . I.runMake . I.make $ map (second CST.pureResult) modules - namesEnv <- fmap fst . runWriterT $ foldM P.externsEnv P.primEnv exts - let - allModuleNames = fmap (P.getModuleName . snd) modules - pure (allModuleNames, exts, namesEnv, env) - case e of - Left err -> print err >> exitFailure - Right (allModuleNames, exts, namesEnv, env) -> server allModuleNames exts namesEnv env port + args <- getArgs + case args of + portString : inputGlobs + | Just port <- readMaybe portString -> run port inputGlobs + _ -> do + IO.hPutStrLn IO.stderr "Usage: trypurescript PORT INPUT_GLOB..." + exitFailure + where + run :: Int -> [String] -> IO () + run port inputGlobs = do + inputFiles <- concat <$> traverse glob inputGlobs + e <- runExceptT $ do + modules <- ExceptT $ I.loadAllModules inputFiles + (exts, env) <- ExceptT . I.runMake . I.make $ map (second CST.pureResult) modules + namesEnv <- fmap fst . runWriterT $ foldM P.externsEnv P.primEnv exts + let + allModuleNames = fmap (P.getModuleName . snd) modules + pure (allModuleNames, exts, namesEnv, env) + case e of + Left err -> print err >> exitFailure + Right (allModuleNames, exts, namesEnv, env) -> server allModuleNames exts namesEnv env port diff --git a/stack.yaml b/stack.yaml index 1949f546..004a1c89 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,16 +1,24 @@ -resolver: lts-20.9 +resolver: lts-23.18 + packages: - "." extra-deps: - - purescript-0.15.13 + # purescript 0.15.16 was not uploaded to Hackage, so we pin its release tag + # on GitHub instead. Note that `client/updateSharedConfigVersions.mjs` + # derives the compiler version from the `commit` value below. + - github: purescript/purescript + commit: v0.15.16 + + # The extra dependencies below mirror the `extra-deps` listed in the + # purescript repository's stack.yaml at the version pinned above. - language-javascript-0.7.0.0 - - process-1.6.13.1 - # The Cabal library is not in Stackage - - Cabal-3.6.3.0 - # Protolude is not yet in resolver snapshot - - protolude-0.3.1 + - bower-json-1.1.0.0 + - these-1.2.1 + - aeson-better-errors-0.9.1.3 + - github: purescript/cheapskate + commit: 633c69024e061ad956f1aecfc137fb99a7a7a20b flags: - these: - assoc: false + aeson-pretty: + lib-only: true diff --git a/stack.yaml.lock b/stack.yaml.lock index 7dccce77..2ea36842 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -1,16 +1,20 @@ # This file was autogenerated by Stack. # You should not edit this file by hand. # For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files +# https://docs.haskellstack.org/en/stable/topics/lock_files packages: - completed: - hackage: purescript-0.15.13@sha256:ed7e4d3561ff6cbc7f950af2450a51f71648c47fece8b9a2b5100f0157a47615,21378 + name: purescript pantry-tree: - sha256: f91a02104c2bb596613dca4cf460e8e218488791b8d2f1d0641cd0e73c9eb072 - size: 159072 + sha256: c16a7cd421dd7b39a4cd19e062bc5243e4573ce29531e8c6734c1e50c107be07 + size: 149027 + sha256: 36abaef46aa3cd0316d924c872987aa186d95654d05aa66060948ab47b161f18 + size: 891651 + url: https://github.com/purescript/purescript/archive/v0.15.16.tar.gz + version: 0.15.16 original: - hackage: purescript-0.15.13 + url: https://github.com/purescript/purescript/archive/v0.15.16.tar.gz - completed: hackage: language-javascript-0.7.0.0@sha256:3eab0262b8ac5621936a4beab6a0f97d0e00a63455a8b0e3ac1547b4088dae7d,3898 pantry-tree: @@ -19,29 +23,40 @@ packages: original: hackage: language-javascript-0.7.0.0 - completed: - hackage: process-1.6.13.1@sha256:c8bb8b7c993ff72d771381b3b56852dd154bce51880a24789c11f57b0688d353,2963 + hackage: bower-json-1.1.0.0@sha256:a136aaca67bf0d15c336f5864f7e9d40ebe046ca2cb4b25bc4895617ea35f9f6,1864 pantry-tree: - sha256: 58117b15fa330c79b3bca6b29c65f815e45840f79cc0915d3434f25e54ac8fa5 - size: 1543 + sha256: 3acd48e7012f246ad44c7c17cd6340362b1dc448c1d93156280814e76d9e0589 + size: 419 original: - hackage: process-1.6.13.1 + hackage: bower-json-1.1.0.0 - completed: - hackage: Cabal-3.6.3.0@sha256:ff97c442b0c679c1c9876acd15f73ac4f602b973c45bde42b43ec28265ee48f4,12459 + hackage: these-1.2.1@sha256:35c57aede96c15ea1fed559ac287b1168eb2b2869d79e62ed8c845780b7ea136,2294 pantry-tree: - sha256: b250a53bdb56844f047a2927833bb565b936a289abfa85dfc2a63148d776368a - size: 19757 + sha256: dc6366ac715dfdf5338a615f71b9ed0542c403a6afcbedcddbc879e947aea6b3 + size: 351 original: - hackage: Cabal-3.6.3.0 + hackage: these-1.2.1 - completed: - hackage: protolude-0.3.1@sha256:1cc9e5a5c26c33a43c52b554443dd9779fef13974eaa0beec7ca6d2551b400da,2647 + hackage: aeson-better-errors-0.9.1.3@sha256:1bfdda3982368cafc7317b9f0c1f7267a6b0bbac9515ae1fad37f2b19178f567,2071 pantry-tree: - sha256: 6452a6ca8d395f7d810139779bb0fd16fc1dbb00f1862630bc08ef5a100430f9 - size: 1645 + sha256: 1c14247866dfb8052506c179e4725b8a7ce1472a4fb227d61576d862d9494551 + size: 492 original: - hackage: protolude-0.3.1 + hackage: aeson-better-errors-0.9.1.3 +- completed: + name: cheapskate + pantry-tree: + sha256: b130a35ad29a61ac64c2d29bb09309ddf07b139342c67ef01ccc59ad4167d529 + size: 12069 + sha256: 2b495e2b6d571c33b91ebb76c1b7fe9c9b56ff90ca0804106a3260f2bbdc9a9a + size: 62489 + url: https://github.com/purescript/cheapskate/archive/633c69024e061ad956f1aecfc137fb99a7a7a20b.tar.gz + version: 0.1.1.2 + original: + url: https://github.com/purescript/cheapskate/archive/633c69024e061ad956f1aecfc137fb99a7a7a20b.tar.gz snapshots: - completed: - sha256: c11fcbeb1aa12761044755b1109d16952ede2cb6147ebde777dd5cb38f784501 - size: 649333 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/9.yaml - original: lts-20.9 + sha256: d133abe75e408a407cce3f032c96ac1bbadf474a93b5156ebf4135b53382d56b + size: 683827 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/23/18.yaml + original: lts-23.18 diff --git a/staging/packages.dhall b/staging/packages.dhall index d64e8014..6bb7496c 100644 --- a/staging/packages.dhall +++ b/staging/packages.dhall @@ -1,6 +1,6 @@ let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.15.13-20231219/packages.dhall - sha256:35b9271b0a49390a9681995c609dbf7357402a1f209e0549d840bca295abe57b + https://github.com/purescript/package-sets/releases/download/psc-0.15.15-20260701/packages.dhall + sha256:bb62858371c55d439baa6bcf463ab70cfe8753d5e1f0520b0955468c018213d6 in upstream - with metadata.version = "v0.15.13" + with metadata.version = "v0.15.16" diff --git a/staging/spago.dhall b/staging/spago.dhall index 44f5caf0..6cb20179 100644 --- a/staging/spago.dhall +++ b/staging/spago.dhall @@ -2,6 +2,7 @@ , dependencies = [ "abc-parser" , "ace" + , "address-rfc2821" , "aff" , "aff-bus" , "aff-coroutines" @@ -11,6 +12,7 @@ , "affjax-node" , "affjax-web" , "ansi" + , "apexcharts" , "applicative-phases" , "argonaut" , "argonaut-aeson-generic" @@ -31,11 +33,14 @@ , "assert" , "assert-multiple" , "avar" + , "axon" , "b64" , "barbies" , "barlow-lens" + , "benchlib" , "bifunctors" , "bigints" + , "blessed" , "bolson" , "bookhound" , "bower-json" @@ -44,13 +49,17 @@ , "canvas-action" , "cartesian" , "catenable-lists" + , "cbor-stream" , "chameleon" , "chameleon-halogen" , "chameleon-react-basic" , "chameleon-styled" , "chameleon-transformers" , "channel" + , "chartjs" + , "chartjs-halogen" , "checked-exceptions" + , "choku" , "classless" , "classless-arbitrary" , "classless-decode-json" @@ -60,6 +69,7 @@ , "codec-argonaut" , "codec-json" , "colors" + , "compile-fail" , "concur-core" , "concur-react" , "concurrent-queues" @@ -70,10 +80,14 @@ , "convertable-options" , "coroutines" , "css" + , "css-class-name-extractor" , "css-frameworks" + , "csv-stream" + , "currency" , "data-mvc" , "datetime" , "datetime-parsing" + , "debounce" , "debug" , "decimals" , "default-values" @@ -81,8 +95,10 @@ , "deno" , "dissect" , "distributive" + , "dodo-printer" , "dom-filereader" , "dom-indexed" + , "dom-simple" , "dotenv" , "droplet" , "dts" @@ -96,23 +112,32 @@ , "elmish-hooks" , "elmish-html" , "elmish-testing-library" + , "elmish-time-machine" , "email-validate" , "encoding" , "enums" , "env-names" + , "environment" , "error" , "eta-conversion" , "exceptions" , "exists" , "exitcodes" , "expect-inferred" + , "express" + , "ezfetch" , "fahrtwind" + , "faker-ffi" + , "fakerjs" , "fallback" , "fast-vect" , "fetch" , "fetch-argonaut" , "fetch-core" , "fetch-yoga-json" + , "ffi-simple" + , "fft" + , "fft-js" , "filterable" , "fix-functor" , "fixed-points" @@ -121,6 +146,7 @@ , "float32" , "fmt" , "foldable-traversable" + , "foldable-traversable-extra" , "foreign" , "foreign-object" , "foreign-readwrite" @@ -141,41 +167,69 @@ , "generate-values" , "generic-router" , "geojson" - , "geometry-plane" + , "geometria" + , "gesso" + , "gojs" + , "golden-test" + , "golem-fetch" , "grain" , "grain-router" , "grain-virtualized" + , "graphql-client" , "graphs" , "group" , "halogen" , "halogen-bootstrap5" + , "halogen-canvas" , "halogen-css" + , "halogen-declarative-canvas" , "halogen-echarts-simple" , "halogen-formless" , "halogen-helix" , "halogen-hooks" , "halogen-hooks-extra" + , "halogen-infinite-scroll" , "halogen-store" , "halogen-storybook" , "halogen-subscriptions" , "halogen-svg-elems" , "halogen-typewriter" + , "halogen-use-trigger-hooks" , "halogen-vdom" , "halogen-vdom-string-renderer" + , "halogen-xterm" + , "harmonia" , "heckin" , "heterogeneous" , "homogeneous" , "http-methods" , "httpurple" + , "huffman" , "humdrum" + , "hylograph-canvas" + , "hylograph-d3-kernel" + , "hylograph-graph" + , "hylograph-layout" + , "hylograph-music" + , "hylograph-optics" + , "hylograph-selection" + , "hylograph-simulation" + , "hylograph-simulation-core" + , "hylograph-simulation-halogen" + , "hylograph-transitions" + , "hylograph-wasm-kernel" , "hyrule" + , "i18next" + , "idb" , "identity" , "identy" , "indexed-db" , "indexed-monad" + , "ink" , "int64" , "integers" , "interpolate" + , "intersection-observer" , "invariant" , "jarilo" , "jelly" @@ -192,19 +246,25 @@ , "js-maps" , "js-promise" , "js-promise-aff" + , "js-temporal" , "js-timers" , "js-uri" + , "jsdom" + , "jsinc" , "json" , "json-codecs" , "justifill" , "jwt" , "labeled-data" + , "language-cst-parser" , "lazy" , "lazy-joe" , "lcg" , "leibniz" + , "leveldb" , "liminal" , "linalg" + , "linear" , "lists" , "literals" , "logging" @@ -214,6 +274,7 @@ , "maps-eager" , "marionette" , "marionette-react-basic-hooks" + , "markdown-it-js" , "marked" , "matrices" , "matryoshka" @@ -222,7 +283,9 @@ , "meowclient" , "metadata" , "midi" + , "milkdown" , "milkis" + , "mimetype" , "minibench" , "mmorph" , "monad-control" @@ -233,6 +296,7 @@ , "monoidal" , "morello" , "mote" + , "motion" , "motsunabe" , "mvc" , "mysql" @@ -242,6 +306,7 @@ , "naturals" , "nested-functor" , "newtype" + , "next-purs-rsc" , "nextjs" , "nextui" , "node-buffer" @@ -259,13 +324,16 @@ , "node-process" , "node-readline" , "node-sqlite3" + , "node-stream-pipes" , "node-streams" , "node-tls" , "node-url" + , "node-workerbees" , "node-zlib" , "nonempty" , "now" , "npm-package-json" + , "nqueens" , "nullable" , "numberfield" , "numbers" @@ -273,13 +341,21 @@ , "oak-debug" , "object-maps" , "ocarina" + , "oooooooooorrrrrrrmm-lib" + , "open-colors-scales-and-schemes" + , "open-drawing" , "open-folds" + , "open-foreign-generic" , "open-memoize" + , "open-mkdirp-aff" , "open-pairing" + , "open-smolder" , "options" + , "optparse" , "ordered-collections" , "ordered-set" , "orders" + , "org-doc" , "owoify" , "pairs" , "parallel" @@ -292,20 +368,28 @@ , "phylio" , "pipes" , "pirates-charm" + , "play" , "pmock" , "point-free" , "pointed-list" , "polymorphic-vectors" , "posix-types" + , "postgresql" , "precise" , "precise-datetime" , "prelude" , "prettier-printer" + , "printf" + , "priority-queue" , "profunctor" , "profunctor-lenses" + , "prospero" , "protobuf" + , "ps-spa" , "psa-utils" , "psci-support" + , "punycode" + , "pursfmt" , "qualified-do" , "quantities" , "quickcheck" @@ -321,28 +405,39 @@ , "react-basic-classic" , "react-basic-dnd" , "react-basic-dom" + , "react-basic-dom-beta" , "react-basic-emotion" , "react-basic-hooks" , "react-basic-storybook" + , "react-dnd-kit" , "react-dom" , "react-halo" , "react-icons" , "react-markdown" , "react-testing-library" , "react-virtuoso" + , "reactix" , "read" , "recharts" , "record" , "record-extra" + , "record-extra-srghma" + , "record-ptional-fields" , "record-studio" + , "ref-lifted" , "refs" , "remotedata" + , "repr" + , "resize-arrays" + , "resize-observer" , "resource" , "resourcet" , "result" , "return" , "ring-modules" , "rito" + , "roman" + , "rough-notation" , "routing" , "routing-duplex" , "run" @@ -352,10 +447,14 @@ , "selection-foldable" , "selective-functors" , "semirings" + , "shuffle" + , "sigil" + , "sigil-hats" , "signal" , "simple-emitter" , "simple-i18n" , "simple-json" + , "simple-json-generics" , "simple-ulid" , "sized-matrices" , "sized-vectors" @@ -365,8 +464,11 @@ , "sparse-matrices" , "sparse-polynomials" , "spec" + , "spec-discovery" , "spec-mocha" + , "spec-node" , "spec-quickcheck" + , "spec-reporter-xunit" , "splitmix" , "ssrs" , "st" @@ -376,21 +478,33 @@ , "strings" , "strings-extra" , "stringutils" + , "structured-logging" , "substitute" + , "supabase" , "supply" , "svg-parser" , "systemd-journald" , "tagged" , "tailrec" + , "tanstack-query" , "tecton" , "tecton-halogen" + , "temporal" , "test-unit" + , "text-formatting" , "thermite" , "thermite-dom" , "these" + , "threading" + , "tidy" + , "tidy-codegen" + , "tldr" + , "toestand" , "transformation-matrix" , "transformers" + , "transit" , "tree-rose" + , "trivial-unfold" , "ts-bridge" , "tuples" , "two-or-more" @@ -402,6 +516,7 @@ , "typelevel-prelude" , "typelevel-regex" , "typelevel-rows" + , "typisch" , "uint" , "ulid" , "uncurried-transformers" @@ -417,15 +532,21 @@ , "untagged-to-tagged" , "untagged-union" , "uri" + , "url-immutable" + , "url-regex-safe" , "uuid" , "uuidv4" , "validation" , "variant" , "variant-encodings" + , "variant-gen" , "vectorfield" , "vectors" , "versions" , "visx" + , "vitest" + , "wasm-base" + , "web-chain" , "web-clipboard" , "web-cssom" , "web-cssom-view" @@ -451,15 +572,75 @@ , "web-url" , "web-workers" , "web-xhr" + , "webb-aff-list" + , "webb-array" + , "webb-channel" + , "webb-commandline" + , "webb-directory" + , "webb-file" + , "webb-map" + , "webb-monad" + , "webb-mutex" + , "webb-parsing" + , "webb-random" + , "webb-refer" + , "webb-set" + , "webb-slot" + , "webb-stateful" + , "webb-string" + , "webb-test" + , "webb-thread" + , "webb-writer" , "webextension-polyfill" , "webgpu" , "which" + , "whine-core" + , "xterm" + , "yaml-next" + , "yoga-acp-om" + , "yoga-better-auth" + , "yoga-bun-yoga" + , "yoga-config" + , "yoga-country" + , "yoga-docker-compose" + , "yoga-dynamodb" + , "yoga-elasticsearch" + , "yoga-fastify" + , "yoga-fastify-om" , "yoga-fetch" + , "yoga-fetch-om" + , "yoga-format" + , "yoga-heroui" + , "yoga-http-api" + , "yoga-jaeger" , "yoga-json" + , "yoga-language" + , "yoga-next-fastify" , "yoga-om" + , "yoga-om-layer" + , "yoga-om-strom" + , "yoga-om-workerbees" + , "yoga-opentelemetry" + , "yoga-options" + , "yoga-pino" , "yoga-postgres" + , "yoga-react" + , "yoga-react-dom" + , "yoga-react-native" + , "yoga-react-om" + , "yoga-redis" + , "yoga-shadcn" + , "yoga-sql-types" + , "yoga-sqlite" + , "yoga-sse" + , "yoga-subtlecrypto" + , "yoga-test-docker" + , "yoga-timezone" , "yoga-tree" + , "yoga-tree-svg" + , "yoga-tree-utils" , "z3" + , "zipperarray" ] , packages = ./packages.dhall , sources = [ "src/**/*.purs" ] diff --git a/trypurescript.cabal b/trypurescript.cabal index 0e54ac31..9b605342 100644 --- a/trypurescript.cabal +++ b/trypurescript.cabal @@ -1,8 +1,8 @@ +cabal-version: 2.4 name: trypurescript version: 1.0.0 -cabal-version: >=1.8 build-type: Simple -license: BSD3 +license: BSD-3-Clause license-file: LICENSE copyright: (c) Phil Freeman 2013 maintainer: paf31@cantab.net @@ -10,32 +10,26 @@ synopsis: Interactive PureScript in the Browser description: A simple web app for trying out the PureScript compiler category: Web author: Phil Freeman -data-dir: "" executable trypurescript -- Since no one depends on this project as a library, - -- packages below are `-any` because their versions are determined - -- by the `stack.yml` file. Versions correspond to the ones - -- specified in the resolver (i.e. the package set) + -- packages below are unbounded because their versions are + -- determined by the `stack.yaml` file. Versions correspond to the + -- ones specified in the resolver (i.e. the package set) -- unless it is a versioned library added via `extra-deps` field. - build-depends: base -any, - aeson -any, - bytestring -any, - data-default -any, - directory -any, - filepath -any, - Glob -any, - scotty -any, + build-depends: base, + aeson, + bytestring, + containers, + Glob, + mtl, purescript, - containers -any, - http-types -any, - transformers -any, - mtl -any, - text -any, - time -any, - warp -any + scotty, + text, + time, + transformers, + warp hs-source-dirs: server main-is: Main.hs - buildable: True - other-modules: Main - ghc-options: -Werror -O2 -threaded -rtsopts + default-language: Haskell2010 + ghc-options: -Wall -Werror -O2 -threaded -rtsopts