From 884f339e6157ff39bb75bee18b0d8b379fb306b5 Mon Sep 17 00:00:00 2001 From: UnrelatedString <33167175+UnrelatedString@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:02:34 -0500 Subject: [PATCH 01/34] Update ci.yml ~~made the CI woke~~ making CI workflow run on renamed main branch after splitting off the unfoldable1 feature branch so I can PR said feature branch to both my own main branch and the official master branch without having to undo the rename in ci.yml for the official PR --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c69237a..46f0422 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [master] + branches: [main] pull_request: - branches: [master] + branches: [main] jobs: build: From aeed7b3a6518b5ce6503d06e84736ee641d4c2bf Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Thu, 27 Feb 2025 16:25:04 -0500 Subject: [PATCH 02/34] my toUnfoldable(1) tweak seems to compile and pass tests in the non-Lazy NonEmpty --- src/Data/List/NonEmpty.purs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Data/List/NonEmpty.purs b/src/Data/List/NonEmpty.purs index 42fa49e..41c0e0f 100644 --- a/src/Data/List/NonEmpty.purs +++ b/src/Data/List/NonEmpty.purs @@ -71,7 +71,7 @@ import Data.NonEmpty ((:|)) import Data.NonEmpty as NE import Data.Semigroup.Traversable (sequence1) import Data.Tuple (Tuple(..), fst, snd) -import Data.Unfoldable (class Unfoldable, unfoldr) +import Data.Unfoldable1 (class Unfoldable1, unfoldr1) import Partial.Unsafe (unsafeCrashWith) import Data.Foldable (foldl, foldr, foldMap, fold, intercalate, elem, notElem, find, findMap, any, all) as Exports @@ -111,9 +111,12 @@ wrappedOperation2 name f (NonEmptyList (x :| xs)) (NonEmptyList (y :| ys)) = lift :: forall a b. (L.List a -> b) -> NonEmptyList a -> b lift f (NonEmptyList (x :| xs)) = f (x : xs) -toUnfoldable :: forall f. Unfoldable f => NonEmptyList ~> f -toUnfoldable = - unfoldr (\xs -> (\rec -> Tuple rec.head rec.tail) <$> L.uncons xs) <<< toList +toUnfoldable :: forall f. Unfoldable1 f => NonEmptyList ~> f +toUnfoldable = + unfoldr1 (\rec -> Tuple rec.head $ L.uncons rec.tail) <<< uncons + + + -- unfoldr (\xs -> (\rec -> Tuple rec.head rec.tail) <$> L.uncons xs) <<< toList fromFoldable :: forall f a. Foldable f => f a -> Maybe (NonEmptyList a) fromFoldable = fromList <<< L.fromFoldable From ae20e8876bf39fd2ba3215ed04f93932ebd59567 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Thu, 27 Feb 2025 16:26:58 -0500 Subject: [PATCH 03/34] And it seems to work copy-pasted in Data.List.Lazy.NonEmpty --- src/Data/List/Lazy/NonEmpty.purs | 6 +++--- src/Data/List/NonEmpty.purs | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Data/List/Lazy/NonEmpty.purs b/src/Data/List/Lazy/NonEmpty.purs index d5d207d..574c510 100644 --- a/src/Data/List/Lazy/NonEmpty.purs +++ b/src/Data/List/Lazy/NonEmpty.purs @@ -28,11 +28,11 @@ import Data.List.Lazy.Types (NonEmptyList(..)) import Data.Maybe (Maybe(..), maybe, fromMaybe) import Data.NonEmpty ((:|)) import Data.Tuple (Tuple(..)) -import Data.Unfoldable (class Unfoldable, unfoldr) +import Data.Unfoldable1 (class Unfoldable1, unfoldr1) -toUnfoldable :: forall f. Unfoldable f => NonEmptyList ~> f +toUnfoldable :: forall f. Unfoldable1 f => NonEmptyList ~> f toUnfoldable = - unfoldr (\xs -> (\rec -> Tuple rec.head rec.tail) <$> L.uncons xs) <<< toList + unfoldr1 (\rec -> Tuple rec.head $ L.uncons rec.tail) <<< uncons fromFoldable :: forall f a. Foldable f => f a -> Maybe (NonEmptyList a) fromFoldable = fromList <<< L.fromFoldable diff --git a/src/Data/List/NonEmpty.purs b/src/Data/List/NonEmpty.purs index 41c0e0f..ce6c13f 100644 --- a/src/Data/List/NonEmpty.purs +++ b/src/Data/List/NonEmpty.purs @@ -112,12 +112,9 @@ lift :: forall a b. (L.List a -> b) -> NonEmptyList a -> b lift f (NonEmptyList (x :| xs)) = f (x : xs) toUnfoldable :: forall f. Unfoldable1 f => NonEmptyList ~> f -toUnfoldable = +toUnfoldable = unfoldr1 (\rec -> Tuple rec.head $ L.uncons rec.tail) <<< uncons - - -- unfoldr (\xs -> (\rec -> Tuple rec.head rec.tail) <$> L.uncons xs) <<< toList - fromFoldable :: forall f a. Foldable f => f a -> Maybe (NonEmptyList a) fromFoldable = fromList <<< L.fromFoldable From 9774982e49d73d02c4949ea18e1df0c175a0b054 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Thu, 27 Feb 2025 16:56:35 -0500 Subject: [PATCH 04/34] Added tests for toUnfoldable (both my NonEmpty reimpls and the normal ones --- test/Test/Data/List.purs | 5 ++++- test/Test/Data/List/Lazy.purs | 14 +++++++++++++- test/Test/Data/List/NonEmpty.purs | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/test/Test/Data/List.purs b/test/Test/Data/List.purs index a96b6d7..cbd1513 100644 --- a/test/Test/Data/List.purs +++ b/test/Test/Data/List.purs @@ -6,7 +6,7 @@ import Data.Array as Array import Data.Foldable (class Foldable, foldMap, foldl) import Data.FoldableWithIndex (foldMapWithIndex, foldlWithIndex, foldrWithIndex) import Data.Function (on) -import Data.List (List(..), Pattern(..), alterAt, catMaybes, concat, concatMap, delete, deleteAt, deleteBy, drop, dropEnd, dropWhile, elemIndex, elemLastIndex, filter, filterM, findIndex, findLastIndex, foldM, fromFoldable, group, groupAll, groupAllBy, groupBy, head, init, insert, insertAt, insertBy, intersect, intersectBy, last, length, mapMaybe, modifyAt, nub, nubBy, nubByEq, nubEq, null, partition, range, reverse, singleton, snoc, sort, sortBy, span, stripPrefix, tail, take, takeEnd, takeWhile, transpose, uncons, union, unionBy, unsnoc, unzip, updateAt, zip, zipWith, zipWithA, (!!), (..), (:), (\\)) +import Data.List (List(..), Pattern(..), alterAt, catMaybes, concat, concatMap, delete, deleteAt, deleteBy, drop, dropEnd, dropWhile, elemIndex, elemLastIndex, filter, filterM, findIndex, findLastIndex, foldM, fromFoldable, group, groupAll, groupAllBy, groupBy, head, init, insert, insertAt, insertBy, intersect, intersectBy, last, length, mapMaybe, modifyAt, nub, nubBy, nubByEq, nubEq, null, partition, range, reverse, singleton, snoc, sort, sortBy, span, stripPrefix, tail, take, takeEnd, takeWhile, toUnfoldable, transpose, uncons, union, unionBy, unsnoc, unzip, updateAt, zip, zipWith, zipWithA, (!!), (..), (:), (\\)) import Data.List.NonEmpty as NEL import Data.Maybe (Maybe(..), isNothing, fromJust) import Data.Monoid.Additive (Additive(..)) @@ -411,6 +411,9 @@ testList = do log "append should be stack-safe" void $ pure $ xs <> xs + log "toUnfoldable should agree with Unfoldable List" + assert $ (1..5) == toUnfoldable (1..5) + step :: Int -> Maybe (Tuple Int Int) step 6 = Nothing step n = Just (Tuple n (n + 1)) diff --git a/test/Test/Data/List/Lazy.purs b/test/Test/Data/List/Lazy.purs index c1c2978..4523758 100644 --- a/test/Test/Data/List/Lazy.purs +++ b/test/Test/Data/List/Lazy.purs @@ -8,7 +8,7 @@ import Data.FoldableWithIndex (foldMapWithIndex, foldlWithIndex, foldrWithIndex) import Data.Function (on) import Data.FunctorWithIndex (mapWithIndex) import Data.Lazy as Z -import Data.List.Lazy (List, Pattern(..), alterAt, catMaybes, concat, concatMap, cycle, cons, delete, deleteAt, deleteBy, drop, dropWhile, elemIndex, elemLastIndex, filter, filterM, findIndex, findLastIndex, foldM, foldMap, foldl, foldr, foldrLazy, fromFoldable, group, groupBy, head, init, insert, insertAt, insertBy, intersect, intersectBy, iterate, last, length, mapMaybe, modifyAt, nil, nub, nubBy, nubEq, nubByEq, null, partition, range, repeat, replicate, replicateM, reverse, scanlLazy, singleton, slice, snoc, span, stripPrefix, tail, take, takeWhile, transpose, uncons, union, unionBy, unzip, updateAt, zip, zipWith, zipWithA, (!!), (..), (:), (\\)) +import Data.List.Lazy (List, Pattern(..), alterAt, catMaybes, concat, concatMap, cycle, cons, delete, deleteAt, deleteBy, drop, dropWhile, elemIndex, elemLastIndex, filter, filterM, findIndex, findLastIndex, foldM, foldMap, foldl, foldr, foldrLazy, fromFoldable, group, groupBy, head, init, insert, insertAt, insertBy, intersect, intersectBy, iterate, last, length, mapMaybe, modifyAt, nil, nub, nubBy, nubEq, nubByEq, null, partition, range, repeat, replicate, replicateM, reverse, scanlLazy, singleton, slice, snoc, span, stripPrefix, tail, take, takeWhile, toUnfoldable, transpose, uncons, union, unionBy, unzip, updateAt, zip, zipWith, zipWithA, (!!), (..), (:), (\\)) import Data.List.Lazy.NonEmpty as NEL import Data.Maybe (Maybe(..), isNothing, fromJust) import Data.Monoid.Additive (Additive(..)) @@ -459,6 +459,18 @@ testListLazy = do log "unfoldr1 should maintain order for NEL" assert $ (nel (1 :| l [2, 3, 4, 5])) == unfoldr1 step1 1 + log "toUnfoldable should agree with Unfoldable List" + assert $ (1..5) == toUnfoldable (1..5) + + log "toUnfoldable should agree with Unfoldable1 NEL" + assert $ nel (1 :| (2..5)) == NEL.toUnfoldable (nel (1 :| (2..5))) + + log "toUnfoldable should work ok on infinite List" + assert $ Just 1 == toUnfoldable (iterate (_ + 1) 1) + + log "toUnfoldable should work ok on infinite NEL" + assert $ Just 1 == NEL.toUnfoldable (nel $ 1 :| iterate (_ + 1) 2) -- Bit odd that `iterate` doesn't produce a NEL as is, but I suppose the whole thing's an afterthought + step :: Int -> Maybe (Tuple Int Int) step 6 = Nothing step n = Just (Tuple n (n + 1)) diff --git a/test/Test/Data/List/NonEmpty.purs b/test/Test/Data/List/NonEmpty.purs index 6ad71c1..db087e5 100644 --- a/test/Test/Data/List/NonEmpty.purs +++ b/test/Test/Data/List/NonEmpty.purs @@ -281,6 +281,9 @@ testNonEmptyList = do log "unfoldr1 should maintain order" assert $ (nel 1 [2, 3, 4, 5]) == unfoldr1 step1 1 + log "toUnfoldable should agree with Unfoldable1 NEL" + assert $ nel 1 [2, 3, 4, 5] == NEL.toUnfoldable (nel 1 [2, 3, 4, 5]) + step1 :: Int -> Tuple Int (Maybe Int) step1 n = Tuple n (if n >= 5 then Nothing else Just (n + 1)) From e88840f36769162d3001122f94cf79996b5cceae Mon Sep 17 00:00:00 2001 From: UnrelatedString <33167175+UnrelatedString@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:31:50 -0500 Subject: [PATCH 05/34] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index db8662b..0f489b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ Breaking changes: New features: +- Change `NonEmpty.toUnfoldable` to produce any `Unfoldable1` (#218 by @UnrelatedString) + Bugfixes: Other improvements: From ed16fa4c564957e94cecfba6af284f74b9c907cf Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Thu, 27 Feb 2025 17:35:16 -0500 Subject: [PATCH 06/34] oh yeah, iterate IS in NonEmpty --- test/Test/Data/List/Lazy.purs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Test/Data/List/Lazy.purs b/test/Test/Data/List/Lazy.purs index 4523758..a57ff39 100644 --- a/test/Test/Data/List/Lazy.purs +++ b/test/Test/Data/List/Lazy.purs @@ -469,7 +469,7 @@ testListLazy = do assert $ Just 1 == toUnfoldable (iterate (_ + 1) 1) log "toUnfoldable should work ok on infinite NEL" - assert $ Just 1 == NEL.toUnfoldable (nel $ 1 :| iterate (_ + 1) 2) -- Bit odd that `iterate` doesn't produce a NEL as is, but I suppose the whole thing's an afterthought + assert $ Just 1 == NEL.toUnfoldable (NEL.iterate (_ + 1) 1) step :: Int -> Maybe (Tuple Int Int) step 6 = Nothing From 048081a579f6e1c3e54665c90b1d91e48cfb7fe0 Mon Sep 17 00:00:00 2001 From: UnrelatedString <33167175+UnrelatedString@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:45:03 -0500 Subject: [PATCH 07/34] Update CHANGELOG.md Fixed my bad guess for PR name --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f489b9..cedff42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ Breaking changes: New features: -- Change `NonEmpty.toUnfoldable` to produce any `Unfoldable1` (#218 by @UnrelatedString) +- Change `NonEmpty.toUnfoldable` to produce any `Unfoldable1` (#220 by @UnrelatedString) Bugfixes: From 46d027340cc9948356f2457f5b209a610ee2ee5d Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 17:48:37 -0400 Subject: [PATCH 08/34] ...aaaaaaaaaand of course local deps can't read bower. whatever at least this is *getting* there and a vastly better idea than the other stuff I tried. afraid of actually putting a spago.yaml in the top level since that could mess with publishing though... copying the dependencies in seems bad for maintainability but for something this low level with so few dependencies I guess it should be Fine --- quickcheck/.spago/BuildInfo.purs | 15 + quickcheck/output/Prim.Boolean/docs.json | 1 + quickcheck/output/Prim.Coerce/docs.json | 1 + quickcheck/output/Prim.Int/docs.json | 1 + quickcheck/output/Prim.Ordering/docs.json | 1 + quickcheck/output/Prim.Row/docs.json | 1 + quickcheck/output/Prim.RowList/docs.json | 1 + quickcheck/output/Prim.Symbol/docs.json | 1 + quickcheck/output/Prim.TypeError/docs.json | 1 + quickcheck/output/Prim/docs.json | 1 + .../Spago.Generated.BuildInfo/corefn.json | 1 + .../Spago.Generated.BuildInfo/docs.json | 1 + .../Spago.Generated.BuildInfo/externs.cbor | Bin 0 -> 754 bytes .../output/Spago.Generated.BuildInfo/index.js | 12 + .../Spago.Generated.BuildInfo/index.js.map | 1 + quickcheck/output/cache-db.json | 1 + quickcheck/output/package.json | 1 + quickcheck/spago.lock | 581 ++++++++++++++++++ quickcheck/spago.yaml | 20 + quickcheck/test/Test/Main.purs | 42 ++ 20 files changed, 684 insertions(+) create mode 100644 quickcheck/.spago/BuildInfo.purs create mode 100644 quickcheck/output/Prim.Boolean/docs.json create mode 100644 quickcheck/output/Prim.Coerce/docs.json create mode 100644 quickcheck/output/Prim.Int/docs.json create mode 100644 quickcheck/output/Prim.Ordering/docs.json create mode 100644 quickcheck/output/Prim.Row/docs.json create mode 100644 quickcheck/output/Prim.RowList/docs.json create mode 100644 quickcheck/output/Prim.Symbol/docs.json create mode 100644 quickcheck/output/Prim.TypeError/docs.json create mode 100644 quickcheck/output/Prim/docs.json create mode 100644 quickcheck/output/Spago.Generated.BuildInfo/corefn.json create mode 100644 quickcheck/output/Spago.Generated.BuildInfo/docs.json create mode 100644 quickcheck/output/Spago.Generated.BuildInfo/externs.cbor create mode 100644 quickcheck/output/Spago.Generated.BuildInfo/index.js create mode 100644 quickcheck/output/Spago.Generated.BuildInfo/index.js.map create mode 100644 quickcheck/output/cache-db.json create mode 100644 quickcheck/output/package.json create mode 100644 quickcheck/spago.lock create mode 100644 quickcheck/spago.yaml create mode 100644 quickcheck/test/Test/Main.purs diff --git a/quickcheck/.spago/BuildInfo.purs b/quickcheck/.spago/BuildInfo.purs new file mode 100644 index 0000000..9286d99 --- /dev/null +++ b/quickcheck/.spago/BuildInfo.purs @@ -0,0 +1,15 @@ +-- @inline export packages always +-- @inline export pursVersion always +-- @inline export spagoVersion always +module Spago.Generated.BuildInfo where + +packages :: { "lists-spec-tests" :: String } +packages = + { "lists-spec-tests": "0.0.0" + } + +pursVersion :: String +pursVersion = "0.15.15" + +spagoVersion :: String +spagoVersion = "0.93.43" diff --git a/quickcheck/output/Prim.Boolean/docs.json b/quickcheck/output/Prim.Boolean/docs.json new file mode 100644 index 0000000..c98a89d --- /dev/null +++ b/quickcheck/output/Prim.Boolean/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Boolean module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level `Boolean` data structure.","declarations":[{"children":[],"comments":"The 'True' boolean type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Boolean"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"True"},{"children":[],"comments":"The 'False' boolean type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Boolean"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"False"}],"name":"Prim.Boolean","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Coerce/docs.json b/quickcheck/output/Prim.Coerce/docs.json new file mode 100644 index 0000000..b05ecf2 --- /dev/null +++ b/quickcheck/output/Prim.Coerce/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Coerce module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains an automatically solved type class for coercing types that have provably-identical runtime representations with [purescript-safe-coerce](https://pursuit.purescript.org/packages/purescript-safe-coerce).","declarations":[{"children":[],"comments":"Coercible is a two-parameter type class that has instances for types `a`\nand `b` if the compiler can infer that they have the same representation.\nCoercible constraints are solved according to the following rules:\n\n* _reflexivity_, any type has the same representation as itself:\n`Coercible a a` holds.\n\n* _symmetry_, if a type `a` can be coerced to some other type `b`, then `b`\ncan also be coerced back to `a`: `Coercible a b` implies `Coercible b a`.\n\n* _transitivity_, if a type `a` can be coerced to some other type `b` which\ncan be coerced to some other type `c`, then `a` can also be coerced to `c`:\n`Coercible a b` and `Coercible b c` imply `Coercible a c`.\n\n* Newtypes can be freely wrapped and unwrapped when their constructor is\nin scope:\n\n newtype Age = Age Int\n\n`Coercible Int Age` and `Coercible Age Int` hold since `Age` has the same\nruntime representation than `Int`.\n\nNewtype constructors have to be in scope to preserve abstraction. It's\ncommon to declare a newtype to encode some invariants (non emptiness of\narrays with `Data.Array.NonEmpty.NonEmptyArray` for example), hide its\nconstructor and export smart constructors instead. Without this restriction,\nthe guarantees provided by such newtypes would be void.\n\n* If none of the above are applicable, two types of kind `Type` may be\ncoercible, but only if their heads are the same. For example,\n`Coercible (Maybe a) (Either a b)` does not hold because `Maybe` and\n`Either` are different. Those types don't share a common runtime\nrepresentation so coercing between them would be unsafe. In addition their\narguments may need to be identical or coercible, depending on the _roles_\nof the head's type parameters. Roles are documented in [the PureScript\nlanguage reference](https://github.com/purescript/documentation/blob/master/language/Roles.md).\n\nCoercible being polykinded, we can also coerce more than types of kind `Type`:\n\n* Rows are coercible when they have the same labels, when the corresponding\npairs of types are coercible and when their tails are coercible:\n`Coercible ( label :: a | r ) ( label :: b | s )` holds when\n`Coercible a b` and `Coercible r s` do. Closed rows cannot be coerced to\nopen rows.\n\n* Higher kinded types are coercible if they are coercible when fully\nsaturated: `Coercible (f :: _ -> Type) (g :: _ -> Type)` holds when\n`Coercible (f a) (g a)` does.\n\nThis rule may seem puzzling since there is no term of type `_ -> Type` to\napply `coerce` to, but it is necessary when coercing types with higher\nkinded parameters.\n","info":{"arguments":[["a",{"annotation":[],"contents":"k","tag":"TypeVar"}],["b",{"annotation":[],"contents":"k","tag":"TypeVar"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Coercible"}],"name":"Prim.Coerce","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Int/docs.json b/quickcheck/output/Prim.Int/docs.json new file mode 100644 index 0000000..ddd7dbd --- /dev/null +++ b/quickcheck/output/Prim.Int/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["sum",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Add"},{"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["ordering",{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["ordering"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Compare"},{"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["product",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["product"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Mul"},{"children":[],"comments":"Compiler solved type class for converting a type-level `Int` into a type-level `String` (i.e. `Symbol`).\n","info":{"arguments":[["int",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["string",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["int"],["string"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"ToString"}],"name":"Prim.Int","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Ordering/docs.json b/quickcheck/output/Prim.Ordering/docs.json new file mode 100644 index 0000000..48e6b14 --- /dev/null +++ b/quickcheck/output/Prim.Ordering/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Ordering module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level `Ordering` data structure.","declarations":[{"children":[],"comments":"The `Ordering` kind represents the three possibilities of comparing two\ntypes of the same kind: `LT` (less than), `EQ` (equal to), and\n`GT` (greater than).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Ordering"},{"children":[],"comments":"The 'less than' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"LT"},{"children":[],"comments":"The 'equal to' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"EQ"},{"children":[],"comments":"The 'greater than' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"GT"}],"name":"Prim.Ordering","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Row/docs.json b/quickcheck/output/Prim.Row/docs.json new file mode 100644 index 0000000..081b2d3 --- /dev/null +++ b/quickcheck/output/Prim.Row/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Row module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with row types.","declarations":[{"children":[],"comments":"The Union type class is used to compute the union of two rows of types\n(left-biased, including duplicates).\n\nThe third type argument represents the union of the first two.\n","info":{"arguments":[["left",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["right",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["union",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["left","right"],["union"]],[["right","union"],["left"]],[["union","left"],["right"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Union"},{"children":[],"comments":"The Nub type class is used to remove duplicate labels from rows.\n","info":{"arguments":[["original",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["nubbed",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["original"],["nubbed"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Nub"},{"children":[],"comments":"The Lacks type class asserts that a label does not occur in a given row.\n","info":{"arguments":[["label",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Lacks"},{"children":[],"comments":"The Cons type class is a 4-way relation which asserts that one row of\ntypes can be obtained from another by inserting a new label/type pair on\nthe left.\n","info":{"arguments":[["label",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["a",{"annotation":[],"contents":"k","tag":"TypeVar"}],["tail",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["label","a","tail"],["row"]],[["label","row"],["a","tail"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Cons"}],"name":"Prim.Row","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.RowList/docs.json b/quickcheck/output/Prim.RowList/docs.json new file mode 100644 index 0000000..1ea89a4 --- /dev/null +++ b/quickcheck/output/Prim.RowList/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.RowList module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level list (`RowList`) that represents an ordered view of a row of types.","declarations":[{"children":[],"comments":"A type level list representation of a row of types.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"RowList"},{"children":[],"comments":"Constructs a new `RowList` from a label, a type, and an existing tail\n`RowList`. E.g: `Cons \"x\" Int (Cons \"y\" Int Nil)`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],"tag":"TypeApp"}],"tag":"TypeApp"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Cons"},{"children":[],"comments":"The empty `RowList`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Nil"},{"children":[],"comments":"Compiler solved type class for generating a `RowList` from a closed row\nof types. Entries are sorted by label and duplicates are preserved in\nthe order they appeared in the row.\n","info":{"arguments":[["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["list",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["row"],["list"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"RowToList"}],"name":"Prim.RowList","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Symbol/docs.json b/quickcheck/output/Prim.Symbol/docs.json new file mode 100644 index 0000000..e2bc9ff --- /dev/null +++ b/quickcheck/output/Prim.Symbol/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.Symbol module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with `Symbols`.","declarations":[{"children":[],"comments":"Compiler solved type class for appending `Symbol`s together.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["appended",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["appended"]],[["right","appended"],["left"]],[["appended","left"],["right"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Append"},{"children":[],"comments":"Compiler solved type class for comparing two `Symbol`s.\nProduces an `Ordering`.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["ordering",{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["ordering"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Compare"},{"children":[],"comments":"Compiler solved type class for either splitting up a symbol into its\nhead and tail or for combining a head and tail into a new symbol.\nRequires the head to be a single character and the combined string\ncannot be empty.\n","info":{"arguments":[["head",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["tail",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["symbol",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["head","tail"],["symbol"]],[["symbol"],["head","tail"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Cons"}],"name":"Prim.Symbol","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.TypeError/docs.json b/quickcheck/output/Prim.TypeError/docs.json new file mode 100644 index 0000000..86ca137 --- /dev/null +++ b/quickcheck/output/Prim.TypeError/docs.json @@ -0,0 +1 @@ +{"comments":"The Prim.TypeError module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains type classes that provide custom type error and warning functionality.","declarations":[{"children":[],"comments":"The Warn type class allows a custom compiler warning to be displayed.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"arguments":[["message",{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Warn"},{"children":[],"comments":"The Fail type class is part of the custom type errors feature. To provide\na custom type error when someone tries to use a particular instance,\nwrite that instance out with a Fail constraint.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"arguments":[["message",{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Fail"},{"children":[],"comments":"`Doc` is the kind of type-level documents.\n\nThis kind is used with the `Fail` and `Warn` type classes.\nBuild up a `Doc` with `Text`, `Quote`, `QuoteLabel`, `Beside`, and `Above`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Doc"},{"children":[],"comments":"The Text type constructor makes a Doc from a Symbol\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Text"},{"children":[],"comments":"The Quote type constructor renders any concrete type as a Doc\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Quote"},{"children":[],"comments":"The `QuoteLabel` type constructor will produce a `Doc` when given a `Symbol`. When the resulting `Doc` is rendered\nfor a `Warn` or `Fail` constraint, a syntactically valid label will be produced, escaping with quotes as needed.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"QuoteLabel"},{"children":[],"comments":"The Beside type constructor combines two Docs horizontally\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Beside"},{"children":[],"comments":"The Above type constructor combines two Docs vertically\nin a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Above"}],"name":"Prim.TypeError","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim/docs.json b/quickcheck/output/Prim/docs.json new file mode 100644 index 0000000..8a8ee9e --- /dev/null +++ b/quickcheck/output/Prim/docs.json @@ -0,0 +1 @@ +{"comments":"The `Prim` module is embedded in the PureScript compiler in order to provide compiler support for certain types — for example, value literals, or syntax sugar. It is implicitly imported unqualified in every module except those that list it as a qualified import.\n\n`Prim` does not include additional built-in types and kinds that are defined deeper in the compiler such as Type wildcards (e.g. `f :: _ -> Int`) and Quantified Types. Rather, these are documented in [the PureScript language reference](https://github.com/purescript/documentation/blob/master/language/Types.md).\n","declarations":[{"children":[],"comments":"A function, which takes values of the type specified by the first type\nparameter, and returns values of the type specified by the second.\nIn the JavaScript backend, this is a standard JavaScript Function.\n\nThe type constructor `(->)` is syntactic sugar for this type constructor.\nIt is recommended to use `(->)` rather than `Function`, where possible.\n\nThat is, prefer this:\n\n f :: Number -> Number\n\nto either of these:\n\n f :: Function Number Number\n f :: (->) Number Number\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Function"},{"children":[],"comments":"An Array: a data structure supporting efficient random access. In\nthe JavaScript backend, values of this type are represented as JavaScript\nArrays at runtime.\n\nConstruct values using literals:\n\n x = [1,2,3,4,5] :: Array Int\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Array"},{"children":[],"comments":"The type of records whose fields are known at compile time. In the\nJavaScript backend, values of this type are represented as JavaScript\nObjects at runtime.\n\nThe type signature here means that the `Record` type constructor takes\na row of concrete types. For example:\n\n type Person = Record (name :: String, age :: Number)\n\nThe syntactic sugar with curly braces `{ }` is generally preferred, though:\n\n type Person = { name :: String, age :: Number }\n\nThe row associates a type to each label which appears in the record.\n\n_Technical note_: PureScript allows duplicate labels in rows, and the\nmeaning of `Record r` is based on the _first_ occurrence of each label in\nthe row `r`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Record"},{"children":[],"comments":"A double precision floating point number (IEEE 754).\n\nConstruct values of this type with literals.\nNegative literals must be wrapped in parentheses if the negation sign could be mistaken\nfor an infix operator:\n\n x = 35.23 :: Number\n y = -1.224e6 :: Number\n z = exp (-1.0) :: Number\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Number"},{"children":[],"comments":"A 32-bit signed integer. See the `purescript-integers` package for details\nof how this is accomplished when compiling to JavaScript.\n\nConstruct values of this type with literals. Hexadecimal syntax is supported.\nNegative literals must be wrapped in parentheses if the negation sign could be mistaken\nfor an infix operator:\n\n x = -23 :: Int\n y = 0x17 :: Int\n z = complement (-24) :: Int\n\nIntegers used as types are considered to have kind `Int`.\nUnlike value-level `Int`s, which must be representable as a 32-bit signed integer,\ntype-level `Int`s are unbounded. Hexadecimal support is also supported at the type level.\n\n type One :: Int\n type One = 1\n \n type Beyond32BitSignedInt :: Int\n type Beyond32BitSignedInt = 2147483648\n \n type HexInt :: Int\n type HexInt = 0x17\n\nNegative integer literals at the type level must be\nwrapped in parentheses if the negation sign could be mistaken for an infix operator.\n\n type NegativeOne = -1\n foo :: Proxy (-1) -> ...\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Int"},{"children":[],"comments":"A String. As in JavaScript, String values represent sequences of UTF-16\ncode units, which are not required to form a valid encoding of Unicode\ntext (for example, lone surrogates are permitted).\n\nConstruct values of this type with literals, using double quotes `\"`:\n\n x = \"hello, world\" :: String\n\nMulti-line string literals are also supported with triple quotes (`\"\"\"`):\n\n x = \"\"\"multi\n line\"\"\"\n\nAt the type level, string literals represent types with kind `Symbol`.\nThese types will have kind `String` in a future release:\n\n type Hello :: Symbol\n type Hello = \"Hello, world\"\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"String"},{"children":[],"comments":"A single character (UTF-16 code unit). The JavaScript representation is a\nnormal `String`, which is guaranteed to contain one code unit. This means\nthat astral plane characters (i.e. those with code point values greater\nthan `0xFFFF`) cannot be represented as `Char` values.\n\nConstruct values of this type with literals, using single quotes `'`:\n\n x = 'a' :: Char\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Char"},{"children":[],"comments":"A JavaScript Boolean value.\n\nConstruct values of this type with the literals `true` and `false`.\n\nThe `True` and `False` types defined in `Prim.Boolean` have this type as their kind.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Boolean"},{"children":[],"comments":"The Partial type class is used to indicate that a function is *partial,*\nthat is, it is not defined for all inputs. In practice, attempting to use\na partial function with a bad input will usually cause an error to be\nthrown, although it is not safe to assume that this will happen in all\ncases. For more information, see\n[purescript-partial](https://pursuit.purescript.org/packages/purescript-partial/).\n","info":{"arguments":[],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Partial"},{"children":[],"comments":"`Type` is the kind of all proper types: those that classify value-level terms.\nFor example the type `Boolean` has kind `Type`; denoted by `Boolean :: Type`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Type"},{"children":[],"comments":"`Constraint` is the kind of type class constraints.\nFor example, a type class declaration like this:\n\n class Semigroup a where\n append :: a -> a -> a\n\nhas the kind signature:\n\n class Semigroup :: Type -> Constraint\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Constraint"},{"children":[],"comments":"`Symbol` is the kind of type-level strings.\n\nConstruct types of this kind using the same literal syntax as documented\nfor strings.\n\n type Hello :: Symbol\n type Hello = \"Hello, world\"\n\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Symbol"},{"children":[],"comments":"`Row` is the kind constructor of label-indexed types which map type-level strings to other types.\nThe most common use of `Row` is `Row Type`, a row mapping labels to basic (of kind `Type`) types:\n\n type ExampleRow :: Row Type\n type ExampleRow = ( name :: String, values :: Array Int )\n\nThis is the kind of `Row` expected by the `Record` type constructor.\nMore advanced row kinds like `Row (Type -> Type)` are used much less frequently.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Row"}],"name":"Prim","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/corefn.json b/quickcheck/output/Spago.Generated.BuildInfo/corefn.json new file mode 100644 index 0000000..03f4eb2 --- /dev/null +++ b/quickcheck/output/Spago.Generated.BuildInfo/corefn.json @@ -0,0 +1 @@ +{"builtWith":"0.15.15","comments":[{"LineComment":" @inline export packages always"},{"LineComment":" @inline export pursVersion always"},{"LineComment":" @inline export spagoVersion always"}],"decls":[{"annotation":{"meta":null,"sourceSpan":{"end":[14,23],"start":[14,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[15,25],"start":[15,16]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.93.43"}},"identifier":"spagoVersion"},{"annotation":{"meta":null,"sourceSpan":{"end":[11,22],"start":[11,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[12,24],"start":[12,15]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.15.15"}},"identifier":"pursVersion"},{"annotation":{"meta":null,"sourceSpan":{"end":[6,45],"start":[6,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[9,4],"start":[8,3]}},"type":"Literal","value":{"literalType":"ObjectLiteral","value":[["lists-spec-tests",{"annotation":{"meta":null,"sourceSpan":{"end":[8,32],"start":[8,25]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.0.0"}}]]}},"identifier":"packages"}],"exports":["packages","pursVersion","spagoVersion"],"foreign":[],"imports":[{"annotation":{"meta":null,"sourceSpan":{"end":[15,25],"start":[4,1]}},"moduleName":["Prim"]}],"moduleName":["Spago","Generated","BuildInfo"],"modulePath":".spago/BuildInfo.purs","reExports":{},"sourceSpan":{"end":[15,25],"start":[4,1]}} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/docs.json b/quickcheck/output/Spago.Generated.BuildInfo/docs.json new file mode 100644 index 0000000..24dbdac --- /dev/null +++ b/quickcheck/output/Spago.Generated.BuildInfo/docs.json @@ -0,0 +1 @@ +{"comments":null,"declarations":[{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Record"],"tag":"TypeConstructor"},{"annotation":[],"contents":["lists-spec-tests",{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"},{"annotation":[],"tag":"REmpty"}],"tag":"RCons"}],"tag":"TypeApp"}},"kind":null,"sourceSpan":{"end":[6,45],"name":".spago/BuildInfo.purs","start":[6,1]},"title":"packages"},{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"}},"kind":null,"sourceSpan":{"end":[11,22],"name":".spago/BuildInfo.purs","start":[11,1]},"title":"pursVersion"},{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"}},"kind":null,"sourceSpan":{"end":[14,23],"name":".spago/BuildInfo.purs","start":[14,1]},"title":"spagoVersion"}],"name":"Spago.Generated.BuildInfo","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/externs.cbor b/quickcheck/output/Spago.Generated.BuildInfo/externs.cbor new file mode 100644 index 0000000000000000000000000000000000000000..64088df0000f6b681eb7dae46dc6aa87a573feba GIT binary patch literal 754 zcmeBVNH@?kGzFpx$>4&-^n5+{)V$Q9#FEq$J*U#loD|QzwEX$a%q;uw4l`F{Gyar zUVOUvK}KsgG%++W%$LZK$do9SC;?(!ATE$dl}HA%N`N$2^gn(FNT@>0LUuxMNl|8A zdJ6|WCrIc(yw}7-j4G1dkP=c^kO~THl-R@=7.0.0 <8.0.0" + }, + { + "prelude": ">=6.0.2 <7.0.0" + }, + { + "quickcheck": ">=8.0.1 <9.0.0" + }, + { + "spec": ">=8.1.1 <9.0.0" + }, + { + "spec-node": ">=0.0.3 <0.1.0" + }, + { + "spec-quickcheck": ">=5.0.2 <6.0.0" + } + ], + "build_plan": [] + } + } + }, + "package_set": { + "address": { + "registry": "64.6.0" + }, + "compiler": ">=0.15.15 <0.16.0", + "content": { + "abc-parser": "2.0.1", + "ace": "9.1.0", + "address-rfc2821": "0.1.1", + "aff": "8.0.0", + "aff-bus": "6.0.0", + "aff-coroutines": "9.0.0", + "aff-promise": "4.0.0", + "aff-retry": "2.0.0", + "affjax": "13.0.0", + "affjax-node": "1.0.0", + "affjax-web": "1.0.0", + "ansi": "7.0.0", + "apexcharts": "0.5.0", + "applicative-phases": "1.0.0", + "argonaut": "9.0.0", + "argonaut-aeson-generic": "0.4.1", + "argonaut-codecs": "9.1.0", + "argonaut-core": "7.0.0", + "argonaut-generic": "8.0.0", + "argonaut-traversals": "10.0.0", + "argparse-basic": "2.0.0", + "array-builder": "0.1.2", + "array-search": "0.6.0", + "arraybuffer": "13.2.0", + "arraybuffer-builder": "3.1.0", + "arraybuffer-types": "3.0.2", + "arrays": "7.3.0", + "arrays-extra": "0.6.1", + "arrays-zipper": "2.0.1", + "ask": "1.0.0", + "assert": "6.0.0", + "assert-multiple": "0.4.0", + "avar": "5.0.1", + "b64": "0.0.8", + "barbies": "1.0.1", + "barlow-lens": "0.9.0", + "benchlib": "0.0.4", + "bifunctors": "6.1.0", + "bigints": "7.0.1", + "bolson": "0.3.9", + "bookhound": "0.1.7", + "bower-json": "3.0.0", + "call-by-name": "4.0.1", + "canvas": "6.0.0", + "canvas-action": "9.0.0", + "cartesian": "1.0.6", + "catenable-lists": "7.0.0", + "cbor-stream": "1.3.0", + "chameleon": "1.0.0", + "chameleon-halogen": "1.0.3", + "chameleon-react-basic": "1.1.0", + "chameleon-styled": "2.5.0", + "chameleon-transformers": "1.0.0", + "channel": "1.0.0", + "checked-exceptions": "3.1.1", + "choku": "1.0.2", + "classless": "0.1.1", + "classless-arbitrary": "0.1.1", + "classless-decode-json": "0.1.1", + "classless-encode-json": "0.1.3", + "classnames": "2.0.0", + "codec": "6.1.0", + "codec-argonaut": "10.0.0", + "codec-json": "2.0.0", + "colors": "7.0.1", + "concur-core": "0.5.0", + "concur-react": "0.5.0", + "concurrent-queues": "3.0.0", + "console": "6.1.0", + "const": "6.0.0", + "contravariant": "6.0.0", + "control": "6.0.0", + "convertable-options": "1.0.0", + "coroutines": "7.0.0", + "css": "6.0.0", + "css-class-name-extractor": "0.0.4", + "css-frameworks": "1.0.1", + "csv-stream": "2.3.0", + "data-mvc": "0.0.2", + "datetime": "6.1.0", + "datetime-parsing": "0.2.0", + "debounce": "0.1.0", + "debug": "6.0.2", + "decimals": "7.1.0", + "default-values": "1.0.1", + "deku": "0.9.23", + "deno": "0.0.5", + "dissect": "1.0.0", + "distributive": "6.0.0", + "dodo-printer": "2.2.3", + "dom-filereader": "7.0.0", + "dom-indexed": "12.0.0", + "dom-simple": "0.4.0", + "dotenv": "4.0.3", + "droplet": "0.6.0", + "dts": "1.0.0", + "dual-numbers": "1.0.3", + "dynamic-buffer": "3.0.1", + "echarts-simple": "0.0.1", + "effect": "4.0.0", + "either": "6.1.0", + "elmish": "0.13.0", + "elmish-enzyme": "0.1.1", + "elmish-hooks": "0.10.3", + "elmish-html": "0.9.0", + "elmish-testing-library": "0.3.2", + "email-validate": "7.0.0", + "encoding": "0.0.9", + "enums": "6.0.1", + "env-names": "0.4.0", + "error": "2.0.0", + "eta-conversion": "0.3.2", + "exceptions": "6.1.0", + "exists": "6.0.0", + "exitcodes": "4.0.0", + "expect-inferred": "3.0.0", + "express": "0.9.1", + "ezfetch": "1.1.0", + "fahrtwind": "2.0.0", + "fakerjs": "0.0.1", + "fallback": "0.1.0", + "fast-vect": "1.2.0", + "fetch": "4.1.0", + "fetch-argonaut": "1.0.1", + "fetch-core": "5.1.0", + "fetch-yoga-json": "1.1.0", + "ffi-simple": "0.5.1", + "fft-js": "0.1.0", + "filterable": "5.0.0", + "fix-functor": "0.1.0", + "fixed-points": "7.0.0", + "fixed-precision": "5.0.0", + "flame": "1.3.0", + "float32": "2.0.0", + "fmt": "0.2.1", + "foldable-traversable": "6.0.0", + "foldable-traversable-extra": "0.0.6", + "foreign": "7.0.0", + "foreign-object": "4.1.0", + "foreign-readwrite": "3.4.0", + "forgetmenot": "0.1.0", + "fork": "6.0.0", + "form-urlencoded": "7.0.0", + "formatters": "7.0.0", + "framer-motion": "1.0.1", + "free": "7.1.0", + "freeap": "7.0.0", + "freer-free": "0.0.1", + "freet": "7.0.0", + "functions": "6.0.0", + "functor1": "3.0.0", + "functors": "5.0.0", + "fuzzy": "0.4.0", + "gen": "4.0.0", + "generate-values": "1.0.1", + "generic-router": "0.0.1", + "geojson": "0.0.5", + "geometria": "2.2.0", + "gesso": "1.0.0", + "gojs": "0.1.1", + "golem-fetch": "0.1.0", + "grain": "3.0.0", + "grain-router": "3.0.0", + "grain-virtualized": "3.0.0", + "graphs": "8.1.0", + "group": "4.1.1", + "halogen": "7.0.0", + "halogen-bootstrap5": "5.3.2", + "halogen-canvas": "1.0.0", + "halogen-css": "10.0.0", + "halogen-declarative-canvas": "0.0.8", + "halogen-echarts-simple": "0.0.4", + "halogen-formless": "4.0.3", + "halogen-helix": "1.1.0", + "halogen-hooks": "0.6.3", + "halogen-hooks-extra": "0.9.0", + "halogen-infinite-scroll": "1.1.0", + "halogen-store": "0.5.4", + "halogen-storybook": "2.0.0", + "halogen-subscriptions": "2.0.0", + "halogen-svg-elems": "8.0.0", + "halogen-typewriter": "1.0.4", + "halogen-use-trigger-hooks": "1.0.0", + "halogen-vdom": "8.0.0", + "halogen-vdom-string-renderer": "0.5.0", + "halogen-xterm": "2.0.0", + "heckin": "2.0.1", + "heterogeneous": "0.6.0", + "homogeneous": "0.4.0", + "http-methods": "6.0.0", + "httpurple": "4.0.0", + "huffman": "0.4.0", + "humdrum": "0.0.1", + "hyrule": "2.3.8", + "identity": "6.0.0", + "identy": "4.0.1", + "indexed-db": "1.0.0", + "indexed-monad": "3.0.0", + "int64": "3.0.0", + "integers": "6.0.0", + "interpolate": "5.0.2", + "intersection-observer": "1.0.1", + "invariant": "6.0.0", + "jarilo": "1.0.1", + "jelly": "0.10.0", + "jelly-router": "0.3.0", + "jelly-signal": "0.4.0", + "jest": "1.0.0", + "js-abort-controller": "1.0.0", + "js-bigints": "2.2.1", + "js-date": "8.0.0", + "js-fetch": "0.2.1", + "js-fileio": "3.0.0", + "js-intl": "1.1.4", + "js-iterators": "0.1.1", + "js-maps": "0.1.2", + "js-promise": "1.0.0", + "js-promise-aff": "1.0.0", + "js-timers": "6.1.0", + "js-uri": "3.1.0", + "jsdom": "1.0.0", + "json": "1.1.0", + "json-codecs": "5.0.0", + "justifill": "0.5.0", + "jwt": "0.0.9", + "labeled-data": "0.2.0", + "language-cst-parser": "0.14.1", + "lazy": "6.0.0", + "lazy-joe": "1.0.0", + "lcg": "4.0.0", + "leibniz": "5.0.0", + "leveldb": "1.0.1", + "liminal": "1.0.1", + "linalg": "6.0.0", + "lists": "7.0.0", + "literals": "1.0.2", + "logging": "3.0.0", + "logging-journald": "0.4.0", + "lumi-components": "18.0.0", + "machines": "7.0.0", + "maps-eager": "0.5.0", + "marionette": "1.0.0", + "marionette-react-basic-hooks": "0.1.1", + "marked": "0.1.0", + "matrices": "5.0.1", + "matryoshka": "1.0.0", + "maybe": "6.0.0", + "media-types": "6.0.0", + "meowclient": "1.0.0", + "midi": "4.0.0", + "milkis": "9.0.0", + "minibench": "4.0.1", + "mmorph": "7.0.0", + "monad-control": "5.0.0", + "monad-logger": "1.3.1", + "monad-loops": "0.5.0", + "monad-unlift": "1.0.1", + "monoid-extras": "0.0.1", + "monoidal": "0.16.0", + "morello": "0.4.0", + "mote": "3.0.0", + "motsunabe": "2.0.0", + "mvc": "0.0.1", + "mysql": "6.0.1", + "n3": "0.1.0", + "nano-id": "1.1.0", + "nanoid": "0.1.0", + "naturals": "3.0.0", + "nested-functor": "0.2.1", + "newtype": "5.0.0", + "nextjs": "0.1.1", + "nextui": "0.2.0", + "node-buffer": "9.0.0", + "node-child-process": "11.1.0", + "node-event-emitter": "3.0.0", + "node-execa": "5.0.0", + "node-fs": "9.2.0", + "node-glob-basic": "2.0.0", + "node-http": "9.1.0", + "node-http2": "1.1.1", + "node-human-signals": "1.0.0", + "node-net": "5.1.0", + "node-os": "5.1.0", + "node-path": "5.0.1", + "node-process": "11.2.0", + "node-readline": "8.1.1", + "node-sqlite3": "8.0.0", + "node-stream-pipes": "2.1.6", + "node-streams": "9.0.1", + "node-tls": "0.3.1", + "node-url": "7.0.1", + "node-workerbees": "0.3.1", + "node-zlib": "0.4.0", + "nonempty": "7.0.0", + "now": "6.0.0", + "npm-package-json": "2.0.0", + "nullable": "6.0.0", + "numberfield": "0.2.2", + "numbers": "9.0.1", + "oak": "3.1.1", + "oak-debug": "1.2.2", + "object-maps": "0.3.0", + "ocarina": "1.5.4", + "oooooooooorrrrrrrmm-lib": "0.0.1", + "open-colors-scales-and-schemes": "1.0.0", + "open-folds": "6.4.0", + "open-foreign-generic": "11.0.3", + "open-memoize": "6.2.0", + "open-mkdirp-aff": "1.2.0", + "open-pairing": "6.2.0", + "open-smolder": "12.0.2", + "options": "7.0.0", + "optparse": "5.0.1", + "ordered-collections": "3.2.0", + "ordered-set": "0.4.0", + "orders": "6.0.0", + "owoify": "1.2.0", + "pairs": "9.0.1", + "parallel": "7.0.0", + "parsing": "10.3.0", + "parsing-dataview": "3.2.4", + "partial": "4.0.0", + "pathy": "9.0.0", + "pha": "0.13.0", + "phaser": "0.7.0", + "phylio": "1.1.2", + "pipes": "8.0.0", + "pirates-charm": "0.0.1", + "pmock": "0.9.0", + "point-free": "1.0.0", + "pointed-list": "0.5.1", + "polymorphic-vectors": "4.0.0", + "posix-types": "6.0.0", + "postgresql": "2.0.20", + "precise": "6.0.0", + "precise-datetime": "7.0.0", + "prelude": "6.0.2", + "prettier-printer": "3.0.0", + "printf": "0.1.0", + "priority-queue": "0.1.2", + "profunctor": "6.0.1", + "profunctor-lenses": "8.0.0", + "protobuf": "4.4.0", + "psa-utils": "8.0.0", + "psci-support": "6.0.0", + "punycode": "1.0.0", + "qualified-do": "2.2.0", + "quantities": "12.2.0", + "quickcheck": "8.0.1", + "quickcheck-combinators": "0.1.3", + "quickcheck-laws": "7.0.0", + "quickcheck-utf8": "0.0.0", + "random": "6.0.0", + "rationals": "6.0.0", + "rdf": "0.1.0", + "react": "11.0.0", + "react-aria": "0.2.0", + "react-basic": "17.0.0", + "react-basic-classic": "3.0.0", + "react-basic-dnd": "10.1.0", + "react-basic-dom": "7.0.0", + "react-basic-dom-beta": "0.1.1", + "react-basic-emotion": "7.1.0", + "react-basic-hooks": "8.2.0", + "react-basic-storybook": "2.0.0", + "react-dom": "8.0.0", + "react-halo": "3.0.0", + "react-icons": "1.1.5", + "react-markdown": "0.1.0", + "react-testing-library": "4.0.1", + "react-virtuoso": "1.0.0", + "reactix": "0.6.1", + "read": "1.0.1", + "recharts": "1.1.0", + "record": "4.0.0", + "record-extra": "5.0.1", + "record-extra-srghma": "0.1.1", + "record-ptional-fields": "0.1.2", + "record-studio": "1.0.4", + "refs": "6.0.0", + "remotedata": "5.0.1", + "repr": "0.5.0", + "resize-arrays": "0.0.1", + "resize-observer": "1.0.0", + "resource": "2.0.1", + "resourcet": "1.0.0", + "result": "1.0.3", + "return": "0.2.0", + "ring-modules": "5.0.1", + "rito": "0.3.4", + "roman": "0.4.0", + "rough-notation": "1.0.2", + "routing": "11.0.0", + "routing-duplex": "0.7.0", + "run": "5.0.0", + "safe-coerce": "2.0.0", + "safely": "4.0.1", + "school-of-music": "1.3.0", + "selection-foldable": "0.2.0", + "selective-functors": "1.0.1", + "semirings": "7.0.0", + "shuffle": "1.1.0", + "signal": "13.0.0", + "simple-emitter": "3.0.1", + "simple-i18n": "2.0.1", + "simple-json": "9.0.0", + "simple-json-generics": "0.2.1", + "simple-ulid": "3.0.0", + "sized-matrices": "1.0.0", + "sized-vectors": "5.0.2", + "slug": "3.1.0", + "small-ffi": "4.0.1", + "soundfonts": "4.1.0", + "sparse-matrices": "2.0.1", + "sparse-polynomials": "3.0.1", + "spec": "8.1.1", + "spec-discovery": "8.4.0", + "spec-mocha": "5.1.1", + "spec-node": "0.0.3", + "spec-quickcheck": "5.0.2", + "spec-reporter-xunit": "0.7.1", + "splitmix": "2.1.0", + "ssrs": "1.0.0", + "st": "6.2.0", + "statistics": "0.3.2", + "strictlypositiveint": "1.0.1", + "string-parsers": "8.0.0", + "strings": "6.0.1", + "strings-extra": "4.0.0", + "stringutils": "0.0.12", + "substitute": "0.2.3", + "supply": "0.2.0", + "svg-parser": "3.0.0", + "systemd-journald": "0.3.0", + "tagged": "4.0.2", + "tailrec": "6.1.0", + "tanstack-query": "2.0.0", + "tecton": "0.2.1", + "tecton-halogen": "0.2.0", + "test-unit": "17.0.0", + "thermite": "6.3.1", + "thermite-dom": "0.3.1", + "these": "6.0.0", + "threading": "0.0.3", + "tidy": "0.11.1", + "tidy-codegen": "4.0.1", + "tldr": "0.0.0", + "toestand": "0.9.0", + "transformation-matrix": "1.0.1", + "transformers": "6.1.0", + "tree-rose": "4.0.2", + "trivial-unfold": "0.5.0", + "ts-bridge": "4.0.0", + "tuples": "7.0.0", + "two-or-more": "1.0.0", + "type-equality": "4.0.1", + "typedenv": "2.0.1", + "typelevel": "6.0.0", + "typelevel-lists": "2.1.0", + "typelevel-peano": "1.0.1", + "typelevel-prelude": "7.0.0", + "typelevel-regex": "0.0.3", + "typelevel-rows": "0.1.0", + "typisch": "0.4.0", + "uint": "7.0.0", + "ulid": "3.0.1", + "uncurried-transformers": "1.1.0", + "undefined": "2.0.0", + "undefined-is-not-a-problem": "1.1.0", + "unfoldable": "6.0.0", + "unicode": "6.0.0", + "unique": "0.6.1", + "unlift": "1.0.1", + "unordered-collections": "3.1.0", + "unsafe-coerce": "6.0.0", + "unsafe-reference": "5.0.0", + "untagged-to-tagged": "0.1.4", + "untagged-union": "1.0.0", + "uri": "9.0.0", + "url-immutable": "1.0.0", + "url-regex-safe": "0.1.1", + "uuid": "9.0.0", + "uuidv4": "1.0.0", + "validation": "6.0.0", + "variant": "8.0.0", + "variant-encodings": "2.0.0", + "variant-gen": "1.0.0", + "vectorfield": "1.0.1", + "vectors": "2.1.0", + "versions": "7.0.0", + "visx": "0.0.2", + "vitest": "1.0.0", + "web-clipboard": "6.0.0", + "web-cssom": "2.0.0", + "web-cssom-view": "0.1.0", + "web-dom": "6.0.0", + "web-dom-parser": "8.0.0", + "web-dom-xpath": "3.0.0", + "web-encoding": "3.0.0", + "web-events": "4.0.0", + "web-fetch": "4.0.1", + "web-file": "4.0.0", + "web-geometry": "0.1.0", + "web-html": "4.1.0", + "web-pointerevents": "2.0.0", + "web-proletarian": "1.0.0", + "web-promise": "3.2.0", + "web-resize-observer": "2.1.0", + "web-router": "1.0.0", + "web-socket": "4.0.0", + "web-storage": "5.0.0", + "web-streams": "4.0.0", + "web-touchevents": "4.0.0", + "web-uievents": "5.0.0", + "web-url": "2.0.0", + "web-workers": "1.1.0", + "web-xhr": "5.0.1", + "webextension-polyfill": "0.1.0", + "webgpu": "0.0.1", + "which": "2.0.0", + "whine-core": "0.0.28", + "xterm": "1.0.0", + "yoga-fetch": "1.0.1", + "yoga-json": "5.1.0", + "yoga-om": "0.1.0", + "yoga-postgres": "6.0.0", + "yoga-react-dom": "1.0.1", + "yoga-subtlecrypto": "0.1.0", + "yoga-tree": "1.0.0", + "z3": "0.0.2", + "zipperarray": "2.0.0" + } + }, + "extra_packages": { + "lists": { + "path": ".." + } + } + }, + "packages": {} +} diff --git a/quickcheck/spago.yaml b/quickcheck/spago.yaml new file mode 100644 index 0000000..380905a --- /dev/null +++ b/quickcheck/spago.yaml @@ -0,0 +1,20 @@ +package: + name: lists-spec-tests + description: spago@next-enabled tests for lists using packages that depend on it + dependencies: + - prelude: ">=6.0.2 <7.0.0" + - lists: ">=7.0.0 <8.0.0" + - quickcheck: ">=8.0.1 <9.0.0" + - spec: ">=8.1.1 <9.0.0" + - spec-quickcheck: ">=5.0.2 <6.0.0" + - spec-node: ">=0.0.3 <0.1.0" + test: + main: Test.Main + dependencies: + [] +workspace: + packageSet: + registry: 64.6.0 + extraPackages: + lists: + path: .. diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs new file mode 100644 index 0000000..2bb1033 --- /dev/null +++ b/quickcheck/test/Test/Main.purs @@ -0,0 +1,42 @@ +module Test.Main where + +import Prelude + +import Effect (Effect) +import Test.QuickCheck ((===), class Testable, class Arbitrary, class Coarbitrary) +import Test.Spec (Spec, describe, it) +import Test.Spec.QuickCheck (quickCheck) +import Test.Spec.Runner.Node (runSpecAndExitProcess) +import Test.Spec.Reporter.Console (consoleReporter) +import Type.Proxy (Proxy(..)) + +import Data.List.Types (List, NonEmptyList) +import Data.List.ZipList (ZipList) +import Data.List.Lazy.Types as LZ + +-- Proxy a is Discard ;) +type For f = + Eq (f Value) => + Show (f Value) => + Arbitrary (f Value) => + Arbitrary (f (Value -> Value)) => + Coarbitrary (f Value) => + Spec (Proxy f) + +type Value = Int + +proxied :: forall m f. m Unit -> m (Proxy f) +proxied = (_ $> Proxy) + +main :: Effect Unit +main = runSpecAndExitProcess [consoleReporter] do + describe + functorLaws :: For List + +functorLaws :: forall f. For f +functorLaws = proxied $ describe "Functor laws" do + it "Identity: map identity = identity" do + quickCheck \(l :: f Value) -> map identity l === l + it "Composition: map (f <<< g) = map f <<< map g" do + quickCheck \(l :: f Value) -> map (f <<< g) l === map f (map g l) + From 91944fa103fd97401ccaa595271150e956671d6e Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 17:49:11 -0400 Subject: [PATCH 09/34] oops --- quickcheck/.spago/BuildInfo.purs | 15 --------------- quickcheck/output/Prim.Boolean/docs.json | 1 - quickcheck/output/Prim.Coerce/docs.json | 1 - quickcheck/output/Prim.Int/docs.json | 1 - quickcheck/output/Prim.Ordering/docs.json | 1 - quickcheck/output/Prim.Row/docs.json | 1 - quickcheck/output/Prim.RowList/docs.json | 1 - quickcheck/output/Prim.Symbol/docs.json | 1 - quickcheck/output/Prim.TypeError/docs.json | 1 - quickcheck/output/Prim/docs.json | 1 - .../output/Spago.Generated.BuildInfo/corefn.json | 1 - .../output/Spago.Generated.BuildInfo/docs.json | 1 - .../Spago.Generated.BuildInfo/externs.cbor | Bin 754 -> 0 bytes .../output/Spago.Generated.BuildInfo/index.js | 12 ------------ .../Spago.Generated.BuildInfo/index.js.map | 1 - quickcheck/output/cache-db.json | 1 - quickcheck/output/package.json | 1 - 17 files changed, 41 deletions(-) delete mode 100644 quickcheck/.spago/BuildInfo.purs delete mode 100644 quickcheck/output/Prim.Boolean/docs.json delete mode 100644 quickcheck/output/Prim.Coerce/docs.json delete mode 100644 quickcheck/output/Prim.Int/docs.json delete mode 100644 quickcheck/output/Prim.Ordering/docs.json delete mode 100644 quickcheck/output/Prim.Row/docs.json delete mode 100644 quickcheck/output/Prim.RowList/docs.json delete mode 100644 quickcheck/output/Prim.Symbol/docs.json delete mode 100644 quickcheck/output/Prim.TypeError/docs.json delete mode 100644 quickcheck/output/Prim/docs.json delete mode 100644 quickcheck/output/Spago.Generated.BuildInfo/corefn.json delete mode 100644 quickcheck/output/Spago.Generated.BuildInfo/docs.json delete mode 100644 quickcheck/output/Spago.Generated.BuildInfo/externs.cbor delete mode 100644 quickcheck/output/Spago.Generated.BuildInfo/index.js delete mode 100644 quickcheck/output/Spago.Generated.BuildInfo/index.js.map delete mode 100644 quickcheck/output/cache-db.json delete mode 100644 quickcheck/output/package.json diff --git a/quickcheck/.spago/BuildInfo.purs b/quickcheck/.spago/BuildInfo.purs deleted file mode 100644 index 9286d99..0000000 --- a/quickcheck/.spago/BuildInfo.purs +++ /dev/null @@ -1,15 +0,0 @@ --- @inline export packages always --- @inline export pursVersion always --- @inline export spagoVersion always -module Spago.Generated.BuildInfo where - -packages :: { "lists-spec-tests" :: String } -packages = - { "lists-spec-tests": "0.0.0" - } - -pursVersion :: String -pursVersion = "0.15.15" - -spagoVersion :: String -spagoVersion = "0.93.43" diff --git a/quickcheck/output/Prim.Boolean/docs.json b/quickcheck/output/Prim.Boolean/docs.json deleted file mode 100644 index c98a89d..0000000 --- a/quickcheck/output/Prim.Boolean/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Boolean module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level `Boolean` data structure.","declarations":[{"children":[],"comments":"The 'True' boolean type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Boolean"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"True"},{"children":[],"comments":"The 'False' boolean type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Boolean"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"False"}],"name":"Prim.Boolean","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Coerce/docs.json b/quickcheck/output/Prim.Coerce/docs.json deleted file mode 100644 index b05ecf2..0000000 --- a/quickcheck/output/Prim.Coerce/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Coerce module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains an automatically solved type class for coercing types that have provably-identical runtime representations with [purescript-safe-coerce](https://pursuit.purescript.org/packages/purescript-safe-coerce).","declarations":[{"children":[],"comments":"Coercible is a two-parameter type class that has instances for types `a`\nand `b` if the compiler can infer that they have the same representation.\nCoercible constraints are solved according to the following rules:\n\n* _reflexivity_, any type has the same representation as itself:\n`Coercible a a` holds.\n\n* _symmetry_, if a type `a` can be coerced to some other type `b`, then `b`\ncan also be coerced back to `a`: `Coercible a b` implies `Coercible b a`.\n\n* _transitivity_, if a type `a` can be coerced to some other type `b` which\ncan be coerced to some other type `c`, then `a` can also be coerced to `c`:\n`Coercible a b` and `Coercible b c` imply `Coercible a c`.\n\n* Newtypes can be freely wrapped and unwrapped when their constructor is\nin scope:\n\n newtype Age = Age Int\n\n`Coercible Int Age` and `Coercible Age Int` hold since `Age` has the same\nruntime representation than `Int`.\n\nNewtype constructors have to be in scope to preserve abstraction. It's\ncommon to declare a newtype to encode some invariants (non emptiness of\narrays with `Data.Array.NonEmpty.NonEmptyArray` for example), hide its\nconstructor and export smart constructors instead. Without this restriction,\nthe guarantees provided by such newtypes would be void.\n\n* If none of the above are applicable, two types of kind `Type` may be\ncoercible, but only if their heads are the same. For example,\n`Coercible (Maybe a) (Either a b)` does not hold because `Maybe` and\n`Either` are different. Those types don't share a common runtime\nrepresentation so coercing between them would be unsafe. In addition their\narguments may need to be identical or coercible, depending on the _roles_\nof the head's type parameters. Roles are documented in [the PureScript\nlanguage reference](https://github.com/purescript/documentation/blob/master/language/Roles.md).\n\nCoercible being polykinded, we can also coerce more than types of kind `Type`:\n\n* Rows are coercible when they have the same labels, when the corresponding\npairs of types are coercible and when their tails are coercible:\n`Coercible ( label :: a | r ) ( label :: b | s )` holds when\n`Coercible a b` and `Coercible r s` do. Closed rows cannot be coerced to\nopen rows.\n\n* Higher kinded types are coercible if they are coercible when fully\nsaturated: `Coercible (f :: _ -> Type) (g :: _ -> Type)` holds when\n`Coercible (f a) (g a)` does.\n\nThis rule may seem puzzling since there is no term of type `_ -> Type` to\napply `coerce` to, but it is necessary when coercing types with higher\nkinded parameters.\n","info":{"arguments":[["a",{"annotation":[],"contents":"k","tag":"TypeVar"}],["b",{"annotation":[],"contents":"k","tag":"TypeVar"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Coercible"}],"name":"Prim.Coerce","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Int/docs.json b/quickcheck/output/Prim.Int/docs.json deleted file mode 100644 index ddd7dbd..0000000 --- a/quickcheck/output/Prim.Int/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Int module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with type-level intural numbers.","declarations":[{"children":[],"comments":"Compiler solved type class for adding type-level `Int`s.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["sum",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["sum"]],[["left","sum"],["right"]],[["right","sum"],["left"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Add"},{"children":[],"comments":"Compiler solved type class for comparing two type-level `Int`s.\nProduces an `Ordering`.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["ordering",{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["ordering"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Compare"},{"children":[],"comments":"Compiler solved type class for multiplying type-level `Int`s.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["product",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["product"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Mul"},{"children":[],"comments":"Compiler solved type class for converting a type-level `Int` into a type-level `String` (i.e. `Symbol`).\n","info":{"arguments":[["int",{"annotation":[],"contents":[["Prim"],"Int"],"tag":"TypeConstructor"}],["string",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["int"],["string"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"ToString"}],"name":"Prim.Int","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Ordering/docs.json b/quickcheck/output/Prim.Ordering/docs.json deleted file mode 100644 index 48e6b14..0000000 --- a/quickcheck/output/Prim.Ordering/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Ordering module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level `Ordering` data structure.","declarations":[{"children":[],"comments":"The `Ordering` kind represents the three possibilities of comparing two\ntypes of the same kind: `LT` (less than), `EQ` (equal to), and\n`GT` (greater than).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Ordering"},{"children":[],"comments":"The 'less than' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"LT"},{"children":[],"comments":"The 'equal to' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"EQ"},{"children":[],"comments":"The 'greater than' ordering type.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"GT"}],"name":"Prim.Ordering","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Row/docs.json b/quickcheck/output/Prim.Row/docs.json deleted file mode 100644 index 081b2d3..0000000 --- a/quickcheck/output/Prim.Row/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Row module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with row types.","declarations":[{"children":[],"comments":"The Union type class is used to compute the union of two rows of types\n(left-biased, including duplicates).\n\nThe third type argument represents the union of the first two.\n","info":{"arguments":[["left",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["right",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["union",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["left","right"],["union"]],[["right","union"],["left"]],[["union","left"],["right"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Union"},{"children":[],"comments":"The Nub type class is used to remove duplicate labels from rows.\n","info":{"arguments":[["original",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["nubbed",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["original"],["nubbed"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Nub"},{"children":[],"comments":"The Lacks type class asserts that a label does not occur in a given row.\n","info":{"arguments":[["label",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Lacks"},{"children":[],"comments":"The Cons type class is a 4-way relation which asserts that one row of\ntypes can be obtained from another by inserting a new label/type pair on\nthe left.\n","info":{"arguments":[["label",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["a",{"annotation":[],"contents":"k","tag":"TypeVar"}],["tail",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["label","a","tail"],["row"]],[["label","row"],["a","tail"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Cons"}],"name":"Prim.Row","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.RowList/docs.json b/quickcheck/output/Prim.RowList/docs.json deleted file mode 100644 index 1ea89a4..0000000 --- a/quickcheck/output/Prim.RowList/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.RowList module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains a type level list (`RowList`) that represents an ordered view of a row of types.","declarations":[{"children":[],"comments":"A type level list representation of a row of types.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"RowList"},{"children":[],"comments":"Constructs a new `RowList` from a label, a type, and an existing tail\n`RowList`. E.g: `Cons \"x\" Int (Cons \"y\" Int Nil)`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],"tag":"TypeApp"}],"tag":"TypeApp"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Cons"},{"children":[],"comments":"The empty `RowList`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Nil"},{"children":[],"comments":"Compiler solved type class for generating a `RowList` from a closed row\nof types. Entries are sorted by label and duplicates are preserved in\nthe order they appeared in the row.\n","info":{"arguments":[["row",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}],["list",{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim","RowList"],"RowList"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"}]],"declType":"typeClass","fundeps":[[["row"],["list"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"RowToList"}],"name":"Prim.RowList","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.Symbol/docs.json b/quickcheck/output/Prim.Symbol/docs.json deleted file mode 100644 index e2bc9ff..0000000 --- a/quickcheck/output/Prim.Symbol/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.Symbol module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains automatically solved type classes for working with `Symbols`.","declarations":[{"children":[],"comments":"Compiler solved type class for appending `Symbol`s together.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["appended",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["appended"]],[["right","appended"],["left"]],[["appended","left"],["right"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Append"},{"children":[],"comments":"Compiler solved type class for comparing two `Symbol`s.\nProduces an `Ordering`.\n","info":{"arguments":[["left",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["right",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["ordering",{"annotation":[],"contents":[["Prim","Ordering"],"Ordering"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["left","right"],["ordering"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Compare"},{"children":[],"comments":"Compiler solved type class for either splitting up a symbol into its\nhead and tail or for combining a head and tail into a new symbol.\nRequires the head to be a single character and the combined string\ncannot be empty.\n","info":{"arguments":[["head",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["tail",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],["symbol",{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[[["head","tail"],["symbol"]],[["symbol"],["head","tail"]]],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Cons"}],"name":"Prim.Symbol","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim.TypeError/docs.json b/quickcheck/output/Prim.TypeError/docs.json deleted file mode 100644 index 86ca137..0000000 --- a/quickcheck/output/Prim.TypeError/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The Prim.TypeError module is embedded in the PureScript compiler. Unlike `Prim`, it is not imported implicitly. It contains type classes that provide custom type error and warning functionality.","declarations":[{"children":[],"comments":"The Warn type class allows a custom compiler warning to be displayed.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"arguments":[["message",{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Warn"},{"children":[],"comments":"The Fail type class is part of the custom type errors feature. To provide\na custom type error when someone tries to use a particular instance,\nwrite that instance out with a Fail constraint.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"arguments":[["message",{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}]],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Fail"},{"children":[],"comments":"`Doc` is the kind of type-level documents.\n\nThis kind is used with the `Fail` and `Warn` type classes.\nBuild up a `Doc` with `Text`, `Quote`, `QuoteLabel`, `Beside`, and `Above`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Doc"},{"children":[],"comments":"The Text type constructor makes a Doc from a Symbol\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Text"},{"children":[],"comments":"The Quote type constructor renders any concrete type as a Doc\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":{"identifier":"k","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"skolem":null,"type":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":"k","tag":"TypeVar"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"visibility":"TypeVarInvisible"},"tag":"ForAll"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Quote"},{"children":[],"comments":"The `QuoteLabel` type constructor will produce a `Doc` when given a `Symbol`. When the resulting `Doc` is rendered\nfor a `Warn` or `Fail` constraint, a syntactically valid label will be produced, escaping with quotes as needed.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Symbol"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"QuoteLabel"},{"children":[],"comments":"The Beside type constructor combines two Docs horizontally\nto be used in a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Beside"},{"children":[],"comments":"The Above type constructor combines two Docs vertically\nin a custom type error.\n\nFor more information, see\n[the Custom Type Errors guide](https://github.com/purescript/documentation/blob/master/guides/Custom-Type-Errors.md).\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim","TypeError"],"Doc"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Above"}],"name":"Prim.TypeError","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Prim/docs.json b/quickcheck/output/Prim/docs.json deleted file mode 100644 index 8a8ee9e..0000000 --- a/quickcheck/output/Prim/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":"The `Prim` module is embedded in the PureScript compiler in order to provide compiler support for certain types — for example, value literals, or syntax sugar. It is implicitly imported unqualified in every module except those that list it as a qualified import.\n\n`Prim` does not include additional built-in types and kinds that are defined deeper in the compiler such as Type wildcards (e.g. `f :: _ -> Int`) and Quantified Types. Rather, these are documented in [the PureScript language reference](https://github.com/purescript/documentation/blob/master/language/Types.md).\n","declarations":[{"children":[],"comments":"A function, which takes values of the type specified by the first type\nparameter, and returns values of the type specified by the second.\nIn the JavaScript backend, this is a standard JavaScript Function.\n\nThe type constructor `(->)` is syntactic sugar for this type constructor.\nIt is recommended to use `(->)` rather than `Function`, where possible.\n\nThat is, prefer this:\n\n f :: Number -> Number\n\nto either of these:\n\n f :: Function Number Number\n f :: (->) Number Number\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Function"},{"children":[],"comments":"An Array: a data structure supporting efficient random access. In\nthe JavaScript backend, values of this type are represented as JavaScript\nArrays at runtime.\n\nConstruct values using literals:\n\n x = [1,2,3,4,5] :: Array Int\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Array"},{"children":[],"comments":"The type of records whose fields are known at compile time. In the\nJavaScript backend, values of this type are represented as JavaScript\nObjects at runtime.\n\nThe type signature here means that the `Record` type constructor takes\na row of concrete types. For example:\n\n type Person = Record (name :: String, age :: Number)\n\nThe syntactic sugar with curly braces `{ }` is generally preferred, though:\n\n type Person = { name :: String, age :: Number }\n\nThe row associates a type to each label which appears in the record.\n\n_Technical note_: PureScript allows duplicate labels in rows, and the\nmeaning of `Record r` is based on the _first_ occurrence of each label in\nthe row `r`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Row"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Record"},{"children":[],"comments":"A double precision floating point number (IEEE 754).\n\nConstruct values of this type with literals.\nNegative literals must be wrapped in parentheses if the negation sign could be mistaken\nfor an infix operator:\n\n x = 35.23 :: Number\n y = -1.224e6 :: Number\n z = exp (-1.0) :: Number\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Number"},{"children":[],"comments":"A 32-bit signed integer. See the `purescript-integers` package for details\nof how this is accomplished when compiling to JavaScript.\n\nConstruct values of this type with literals. Hexadecimal syntax is supported.\nNegative literals must be wrapped in parentheses if the negation sign could be mistaken\nfor an infix operator:\n\n x = -23 :: Int\n y = 0x17 :: Int\n z = complement (-24) :: Int\n\nIntegers used as types are considered to have kind `Int`.\nUnlike value-level `Int`s, which must be representable as a 32-bit signed integer,\ntype-level `Int`s are unbounded. Hexadecimal support is also supported at the type level.\n\n type One :: Int\n type One = 1\n \n type Beyond32BitSignedInt :: Int\n type Beyond32BitSignedInt = 2147483648\n \n type HexInt :: Int\n type HexInt = 0x17\n\nNegative integer literals at the type level must be\nwrapped in parentheses if the negation sign could be mistaken for an infix operator.\n\n type NegativeOne = -1\n foo :: Proxy (-1) -> ...\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Int"},{"children":[],"comments":"A String. As in JavaScript, String values represent sequences of UTF-16\ncode units, which are not required to form a valid encoding of Unicode\ntext (for example, lone surrogates are permitted).\n\nConstruct values of this type with literals, using double quotes `\"`:\n\n x = \"hello, world\" :: String\n\nMulti-line string literals are also supported with triple quotes (`\"\"\"`):\n\n x = \"\"\"multi\n line\"\"\"\n\nAt the type level, string literals represent types with kind `Symbol`.\nThese types will have kind `String` in a future release:\n\n type Hello :: Symbol\n type Hello = \"Hello, world\"\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"String"},{"children":[],"comments":"A single character (UTF-16 code unit). The JavaScript representation is a\nnormal `String`, which is guaranteed to contain one code unit. This means\nthat astral plane characters (i.e. those with code point values greater\nthan `0xFFFF`) cannot be represented as `Char` values.\n\nConstruct values of this type with literals, using single quotes `'`:\n\n x = 'a' :: Char\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Char"},{"children":[],"comments":"A JavaScript Boolean value.\n\nConstruct values of this type with the literals `true` and `false`.\n\nThe `True` and `False` types defined in `Prim.Boolean` have this type as their kind.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Boolean"},{"children":[],"comments":"The Partial type class is used to indicate that a function is *partial,*\nthat is, it is not defined for all inputs. In practice, attempting to use\na partial function with a bad input will usually cause an error to be\nthrown, although it is not safe to assume that this will happen in all\ncases. For more information, see\n[purescript-partial](https://pursuit.purescript.org/packages/purescript-partial/).\n","info":{"arguments":[],"declType":"typeClass","fundeps":[],"superclasses":[]},"kind":null,"sourceSpan":null,"title":"Partial"},{"children":[],"comments":"`Type` is the kind of all proper types: those that classify value-level terms.\nFor example the type `Boolean` has kind `Type`; denoted by `Boolean :: Type`.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Type"},{"children":[],"comments":"`Constraint` is the kind of type class constraints.\nFor example, a type class declaration like this:\n\n class Semigroup a where\n append :: a -> a -> a\n\nhas the kind signature:\n\n class Semigroup :: Type -> Constraint\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Constraint"},{"children":[],"comments":"`Symbol` is the kind of type-level strings.\n\nConstruct types of this kind using the same literal syntax as documented\nfor strings.\n\n type Hello :: Symbol\n type Hello = \"Hello, world\"\n\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Symbol"},{"children":[],"comments":"`Row` is the kind constructor of label-indexed types which map type-level strings to other types.\nThe most common use of `Row` is `Row Type`, a row mapping labels to basic (of kind `Type`) types:\n\n type ExampleRow :: Row Type\n type ExampleRow = ( name :: String, values :: Array Int )\n\nThis is the kind of `Row` expected by the `Record` type constructor.\nMore advanced row kinds like `Row (Type -> Type)` are used much less frequently.\n","info":{"declType":"externData","kind":{"annotation":[],"contents":[{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Function"],"tag":"TypeConstructor"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},{"annotation":[],"contents":[["Prim"],"Type"],"tag":"TypeConstructor"}],"tag":"TypeApp"},"roles":[]},"kind":null,"sourceSpan":null,"title":"Row"}],"name":"Prim","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/corefn.json b/quickcheck/output/Spago.Generated.BuildInfo/corefn.json deleted file mode 100644 index 03f4eb2..0000000 --- a/quickcheck/output/Spago.Generated.BuildInfo/corefn.json +++ /dev/null @@ -1 +0,0 @@ -{"builtWith":"0.15.15","comments":[{"LineComment":" @inline export packages always"},{"LineComment":" @inline export pursVersion always"},{"LineComment":" @inline export spagoVersion always"}],"decls":[{"annotation":{"meta":null,"sourceSpan":{"end":[14,23],"start":[14,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[15,25],"start":[15,16]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.93.43"}},"identifier":"spagoVersion"},{"annotation":{"meta":null,"sourceSpan":{"end":[11,22],"start":[11,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[12,24],"start":[12,15]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.15.15"}},"identifier":"pursVersion"},{"annotation":{"meta":null,"sourceSpan":{"end":[6,45],"start":[6,1]}},"bindType":"NonRec","expression":{"annotation":{"meta":null,"sourceSpan":{"end":[9,4],"start":[8,3]}},"type":"Literal","value":{"literalType":"ObjectLiteral","value":[["lists-spec-tests",{"annotation":{"meta":null,"sourceSpan":{"end":[8,32],"start":[8,25]}},"type":"Literal","value":{"literalType":"StringLiteral","value":"0.0.0"}}]]}},"identifier":"packages"}],"exports":["packages","pursVersion","spagoVersion"],"foreign":[],"imports":[{"annotation":{"meta":null,"sourceSpan":{"end":[15,25],"start":[4,1]}},"moduleName":["Prim"]}],"moduleName":["Spago","Generated","BuildInfo"],"modulePath":".spago/BuildInfo.purs","reExports":{},"sourceSpan":{"end":[15,25],"start":[4,1]}} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/docs.json b/quickcheck/output/Spago.Generated.BuildInfo/docs.json deleted file mode 100644 index 24dbdac..0000000 --- a/quickcheck/output/Spago.Generated.BuildInfo/docs.json +++ /dev/null @@ -1 +0,0 @@ -{"comments":null,"declarations":[{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[{"annotation":[],"contents":[["Prim"],"Record"],"tag":"TypeConstructor"},{"annotation":[],"contents":["lists-spec-tests",{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"},{"annotation":[],"tag":"REmpty"}],"tag":"RCons"}],"tag":"TypeApp"}},"kind":null,"sourceSpan":{"end":[6,45],"name":".spago/BuildInfo.purs","start":[6,1]},"title":"packages"},{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"}},"kind":null,"sourceSpan":{"end":[11,22],"name":".spago/BuildInfo.purs","start":[11,1]},"title":"pursVersion"},{"children":[],"comments":null,"info":{"declType":"value","type":{"annotation":[],"contents":[["Prim"],"String"],"tag":"TypeConstructor"}},"kind":null,"sourceSpan":{"end":[14,23],"name":".spago/BuildInfo.purs","start":[14,1]},"title":"spagoVersion"}],"name":"Spago.Generated.BuildInfo","reExports":[]} \ No newline at end of file diff --git a/quickcheck/output/Spago.Generated.BuildInfo/externs.cbor b/quickcheck/output/Spago.Generated.BuildInfo/externs.cbor deleted file mode 100644 index 64088df0000f6b681eb7dae46dc6aa87a573feba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmeBVNH@?kGzFpx$>4&-^n5+{)V$Q9#FEq$J*U#loD|QzwEX$a%q;uw4l`F{Gyar zUVOUvK}KsgG%++W%$LZK$do9SC;?(!ATE$dl}HA%N`N$2^gn(FNT@>0LUuxMNl|8A zdJ6|WCrIc(yw}7-j4G1dkP=c^kO~THl-R@ Date: Tue, 29 Apr 2025 17:49:40 -0400 Subject: [PATCH 10/34] ooops --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 7ebd961..89e37f9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ /node_modules/ /output/ package-lock.json + +/quickcheck/.spago +/quickcheck/output From 1bc783ebb94fa9a9ffbbfe1ad4e703e8154f5afd Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 17:56:27 -0400 Subject: [PATCH 11/34] so wait I can't even ... ??? --- quickcheck/spago.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/quickcheck/spago.yaml b/quickcheck/spago.yaml index 380905a..2120c71 100644 --- a/quickcheck/spago.yaml +++ b/quickcheck/spago.yaml @@ -18,3 +18,16 @@ workspace: extraPackages: lists: path: .. + dependencies: + - bifunctors: ">=6.0.0 <7.0.0" + - control: ">=6.0.0 <7.0.0" + - foldable-traversable: ">=6.0.0 <7.0.0" + - lazy: ">=6.0.0 <7.0.0" + - maybe: ">=6.0.0 <7.0.0" + - newtype: ">=5.0.0 <6.0.0" + - nonempty: ">=7.0.0 <8.0.0" + - partial: ">=4.0.0 <5.0.0" + - prelude: ">=6.0.0 <7.0.0" + - tailrec: ">=6.0.0 <7.0.0" + - tuples: ">=7.0.0 <8.0.0" + - unfoldable: ">=6.0.0 <7.0.0" From 0b5f98eadb8b875e14c2d22b367bbef0afec93c2 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:00:25 -0400 Subject: [PATCH 12/34] nope --- quickcheck/spago.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/quickcheck/spago.yaml b/quickcheck/spago.yaml index 2120c71..2975a02 100644 --- a/quickcheck/spago.yaml +++ b/quickcheck/spago.yaml @@ -19,15 +19,15 @@ workspace: lists: path: .. dependencies: - - bifunctors: ">=6.0.0 <7.0.0" - - control: ">=6.0.0 <7.0.0" - - foldable-traversable: ">=6.0.0 <7.0.0" - - lazy: ">=6.0.0 <7.0.0" - - maybe: ">=6.0.0 <7.0.0" - - newtype: ">=5.0.0 <6.0.0" - - nonempty: ">=7.0.0 <8.0.0" - - partial: ">=4.0.0 <5.0.0" - - prelude: ">=6.0.0 <7.0.0" - - tailrec: ">=6.0.0 <7.0.0" - - tuples: ">=7.0.0 <8.0.0" - - unfoldable: ">=6.0.0 <7.0.0" + - bifunctors + - control + - foldable-traversable + - lazy + - maybe + - newtype + - nonempty + - partial + - prelude + - tailrec + - tuples + - unfoldable From aa6015513d269866585039e8bea8e1f23d9faac8 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:08:17 -0400 Subject: [PATCH 13/34] ...just hope this works I guess LMAO --- bower.json | 6 +++++- quickcheck/test/Test/Main.purs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 62188ce..ce29698 100644 --- a/bower.json +++ b/bower.json @@ -36,6 +36,10 @@ "purescript-arrays": "^7.0.0", "purescript-assert": "^6.0.0", "purescript-console": "^6.0.0", - "purescript-minibench": "^4.0.0" + "purescript-minibench": "^4.0.0", + "purescript-quickcheck": "^8.0.1", + "purescript-spec": "^8.1.1", + "purescript-spec-quickcheck": "^5.0.2", + "purescript-spec-node": "^0.0.3" } } diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 2bb1033..cb0d235 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -1,4 +1,4 @@ -module Test.Main where +module Test.ClassLaws where import Prelude From 0c920af94badef8dc3907d7081d4950076e52ffb Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:18:51 -0400 Subject: [PATCH 14/34] so. anything too new literally CAN'T be on Bower because the whole thing's deprecated. LMAO. aaaaand of course having this as its own recursive dependency kinda messes things up after all :P --- .gitignore | 3 - bower.json | 2 +- quickcheck/spago.lock | 581 ------------------ quickcheck/spago.yaml | 33 - .../Main.purs => test/Test/ClassLaws.purs | 0 5 files changed, 1 insertion(+), 618 deletions(-) delete mode 100644 quickcheck/spago.lock delete mode 100644 quickcheck/spago.yaml rename quickcheck/test/Test/Main.purs => test/Test/ClassLaws.purs (100%) diff --git a/.gitignore b/.gitignore index 89e37f9..7ebd961 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,3 @@ /node_modules/ /output/ package-lock.json - -/quickcheck/.spago -/quickcheck/output diff --git a/bower.json b/bower.json index ce29698..b834dd9 100644 --- a/bower.json +++ b/bower.json @@ -40,6 +40,6 @@ "purescript-quickcheck": "^8.0.1", "purescript-spec": "^8.1.1", "purescript-spec-quickcheck": "^5.0.2", - "purescript-spec-node": "^0.0.3" + "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" } } diff --git a/quickcheck/spago.lock b/quickcheck/spago.lock deleted file mode 100644 index d30966f..0000000 --- a/quickcheck/spago.lock +++ /dev/null @@ -1,581 +0,0 @@ -{ - "workspace": { - "packages": { - "lists-spec-tests": { - "path": "./", - "core": { - "dependencies": [], - "build_plan": [] - }, - "test": { - "dependencies": [ - { - "lists": ">=7.0.0 <8.0.0" - }, - { - "prelude": ">=6.0.2 <7.0.0" - }, - { - "quickcheck": ">=8.0.1 <9.0.0" - }, - { - "spec": ">=8.1.1 <9.0.0" - }, - { - "spec-node": ">=0.0.3 <0.1.0" - }, - { - "spec-quickcheck": ">=5.0.2 <6.0.0" - } - ], - "build_plan": [] - } - } - }, - "package_set": { - "address": { - "registry": "64.6.0" - }, - "compiler": ">=0.15.15 <0.16.0", - "content": { - "abc-parser": "2.0.1", - "ace": "9.1.0", - "address-rfc2821": "0.1.1", - "aff": "8.0.0", - "aff-bus": "6.0.0", - "aff-coroutines": "9.0.0", - "aff-promise": "4.0.0", - "aff-retry": "2.0.0", - "affjax": "13.0.0", - "affjax-node": "1.0.0", - "affjax-web": "1.0.0", - "ansi": "7.0.0", - "apexcharts": "0.5.0", - "applicative-phases": "1.0.0", - "argonaut": "9.0.0", - "argonaut-aeson-generic": "0.4.1", - "argonaut-codecs": "9.1.0", - "argonaut-core": "7.0.0", - "argonaut-generic": "8.0.0", - "argonaut-traversals": "10.0.0", - "argparse-basic": "2.0.0", - "array-builder": "0.1.2", - "array-search": "0.6.0", - "arraybuffer": "13.2.0", - "arraybuffer-builder": "3.1.0", - "arraybuffer-types": "3.0.2", - "arrays": "7.3.0", - "arrays-extra": "0.6.1", - "arrays-zipper": "2.0.1", - "ask": "1.0.0", - "assert": "6.0.0", - "assert-multiple": "0.4.0", - "avar": "5.0.1", - "b64": "0.0.8", - "barbies": "1.0.1", - "barlow-lens": "0.9.0", - "benchlib": "0.0.4", - "bifunctors": "6.1.0", - "bigints": "7.0.1", - "bolson": "0.3.9", - "bookhound": "0.1.7", - "bower-json": "3.0.0", - "call-by-name": "4.0.1", - "canvas": "6.0.0", - "canvas-action": "9.0.0", - "cartesian": "1.0.6", - "catenable-lists": "7.0.0", - "cbor-stream": "1.3.0", - "chameleon": "1.0.0", - "chameleon-halogen": "1.0.3", - "chameleon-react-basic": "1.1.0", - "chameleon-styled": "2.5.0", - "chameleon-transformers": "1.0.0", - "channel": "1.0.0", - "checked-exceptions": "3.1.1", - "choku": "1.0.2", - "classless": "0.1.1", - "classless-arbitrary": "0.1.1", - "classless-decode-json": "0.1.1", - "classless-encode-json": "0.1.3", - "classnames": "2.0.0", - "codec": "6.1.0", - "codec-argonaut": "10.0.0", - "codec-json": "2.0.0", - "colors": "7.0.1", - "concur-core": "0.5.0", - "concur-react": "0.5.0", - "concurrent-queues": "3.0.0", - "console": "6.1.0", - "const": "6.0.0", - "contravariant": "6.0.0", - "control": "6.0.0", - "convertable-options": "1.0.0", - "coroutines": "7.0.0", - "css": "6.0.0", - "css-class-name-extractor": "0.0.4", - "css-frameworks": "1.0.1", - "csv-stream": "2.3.0", - "data-mvc": "0.0.2", - "datetime": "6.1.0", - "datetime-parsing": "0.2.0", - "debounce": "0.1.0", - "debug": "6.0.2", - "decimals": "7.1.0", - "default-values": "1.0.1", - "deku": "0.9.23", - "deno": "0.0.5", - "dissect": "1.0.0", - "distributive": "6.0.0", - "dodo-printer": "2.2.3", - "dom-filereader": "7.0.0", - "dom-indexed": "12.0.0", - "dom-simple": "0.4.0", - "dotenv": "4.0.3", - "droplet": "0.6.0", - "dts": "1.0.0", - "dual-numbers": "1.0.3", - "dynamic-buffer": "3.0.1", - "echarts-simple": "0.0.1", - "effect": "4.0.0", - "either": "6.1.0", - "elmish": "0.13.0", - "elmish-enzyme": "0.1.1", - "elmish-hooks": "0.10.3", - "elmish-html": "0.9.0", - "elmish-testing-library": "0.3.2", - "email-validate": "7.0.0", - "encoding": "0.0.9", - "enums": "6.0.1", - "env-names": "0.4.0", - "error": "2.0.0", - "eta-conversion": "0.3.2", - "exceptions": "6.1.0", - "exists": "6.0.0", - "exitcodes": "4.0.0", - "expect-inferred": "3.0.0", - "express": "0.9.1", - "ezfetch": "1.1.0", - "fahrtwind": "2.0.0", - "fakerjs": "0.0.1", - "fallback": "0.1.0", - "fast-vect": "1.2.0", - "fetch": "4.1.0", - "fetch-argonaut": "1.0.1", - "fetch-core": "5.1.0", - "fetch-yoga-json": "1.1.0", - "ffi-simple": "0.5.1", - "fft-js": "0.1.0", - "filterable": "5.0.0", - "fix-functor": "0.1.0", - "fixed-points": "7.0.0", - "fixed-precision": "5.0.0", - "flame": "1.3.0", - "float32": "2.0.0", - "fmt": "0.2.1", - "foldable-traversable": "6.0.0", - "foldable-traversable-extra": "0.0.6", - "foreign": "7.0.0", - "foreign-object": "4.1.0", - "foreign-readwrite": "3.4.0", - "forgetmenot": "0.1.0", - "fork": "6.0.0", - "form-urlencoded": "7.0.0", - "formatters": "7.0.0", - "framer-motion": "1.0.1", - "free": "7.1.0", - "freeap": "7.0.0", - "freer-free": "0.0.1", - "freet": "7.0.0", - "functions": "6.0.0", - "functor1": "3.0.0", - "functors": "5.0.0", - "fuzzy": "0.4.0", - "gen": "4.0.0", - "generate-values": "1.0.1", - "generic-router": "0.0.1", - "geojson": "0.0.5", - "geometria": "2.2.0", - "gesso": "1.0.0", - "gojs": "0.1.1", - "golem-fetch": "0.1.0", - "grain": "3.0.0", - "grain-router": "3.0.0", - "grain-virtualized": "3.0.0", - "graphs": "8.1.0", - "group": "4.1.1", - "halogen": "7.0.0", - "halogen-bootstrap5": "5.3.2", - "halogen-canvas": "1.0.0", - "halogen-css": "10.0.0", - "halogen-declarative-canvas": "0.0.8", - "halogen-echarts-simple": "0.0.4", - "halogen-formless": "4.0.3", - "halogen-helix": "1.1.0", - "halogen-hooks": "0.6.3", - "halogen-hooks-extra": "0.9.0", - "halogen-infinite-scroll": "1.1.0", - "halogen-store": "0.5.4", - "halogen-storybook": "2.0.0", - "halogen-subscriptions": "2.0.0", - "halogen-svg-elems": "8.0.0", - "halogen-typewriter": "1.0.4", - "halogen-use-trigger-hooks": "1.0.0", - "halogen-vdom": "8.0.0", - "halogen-vdom-string-renderer": "0.5.0", - "halogen-xterm": "2.0.0", - "heckin": "2.0.1", - "heterogeneous": "0.6.0", - "homogeneous": "0.4.0", - "http-methods": "6.0.0", - "httpurple": "4.0.0", - "huffman": "0.4.0", - "humdrum": "0.0.1", - "hyrule": "2.3.8", - "identity": "6.0.0", - "identy": "4.0.1", - "indexed-db": "1.0.0", - "indexed-monad": "3.0.0", - "int64": "3.0.0", - "integers": "6.0.0", - "interpolate": "5.0.2", - "intersection-observer": "1.0.1", - "invariant": "6.0.0", - "jarilo": "1.0.1", - "jelly": "0.10.0", - "jelly-router": "0.3.0", - "jelly-signal": "0.4.0", - "jest": "1.0.0", - "js-abort-controller": "1.0.0", - "js-bigints": "2.2.1", - "js-date": "8.0.0", - "js-fetch": "0.2.1", - "js-fileio": "3.0.0", - "js-intl": "1.1.4", - "js-iterators": "0.1.1", - "js-maps": "0.1.2", - "js-promise": "1.0.0", - "js-promise-aff": "1.0.0", - "js-timers": "6.1.0", - "js-uri": "3.1.0", - "jsdom": "1.0.0", - "json": "1.1.0", - "json-codecs": "5.0.0", - "justifill": "0.5.0", - "jwt": "0.0.9", - "labeled-data": "0.2.0", - "language-cst-parser": "0.14.1", - "lazy": "6.0.0", - "lazy-joe": "1.0.0", - "lcg": "4.0.0", - "leibniz": "5.0.0", - "leveldb": "1.0.1", - "liminal": "1.0.1", - "linalg": "6.0.0", - "lists": "7.0.0", - "literals": "1.0.2", - "logging": "3.0.0", - "logging-journald": "0.4.0", - "lumi-components": "18.0.0", - "machines": "7.0.0", - "maps-eager": "0.5.0", - "marionette": "1.0.0", - "marionette-react-basic-hooks": "0.1.1", - "marked": "0.1.0", - "matrices": "5.0.1", - "matryoshka": "1.0.0", - "maybe": "6.0.0", - "media-types": "6.0.0", - "meowclient": "1.0.0", - "midi": "4.0.0", - "milkis": "9.0.0", - "minibench": "4.0.1", - "mmorph": "7.0.0", - "monad-control": "5.0.0", - "monad-logger": "1.3.1", - "monad-loops": "0.5.0", - "monad-unlift": "1.0.1", - "monoid-extras": "0.0.1", - "monoidal": "0.16.0", - "morello": "0.4.0", - "mote": "3.0.0", - "motsunabe": "2.0.0", - "mvc": "0.0.1", - "mysql": "6.0.1", - "n3": "0.1.0", - "nano-id": "1.1.0", - "nanoid": "0.1.0", - "naturals": "3.0.0", - "nested-functor": "0.2.1", - "newtype": "5.0.0", - "nextjs": "0.1.1", - "nextui": "0.2.0", - "node-buffer": "9.0.0", - "node-child-process": "11.1.0", - "node-event-emitter": "3.0.0", - "node-execa": "5.0.0", - "node-fs": "9.2.0", - "node-glob-basic": "2.0.0", - "node-http": "9.1.0", - "node-http2": "1.1.1", - "node-human-signals": "1.0.0", - "node-net": "5.1.0", - "node-os": "5.1.0", - "node-path": "5.0.1", - "node-process": "11.2.0", - "node-readline": "8.1.1", - "node-sqlite3": "8.0.0", - "node-stream-pipes": "2.1.6", - "node-streams": "9.0.1", - "node-tls": "0.3.1", - "node-url": "7.0.1", - "node-workerbees": "0.3.1", - "node-zlib": "0.4.0", - "nonempty": "7.0.0", - "now": "6.0.0", - "npm-package-json": "2.0.0", - "nullable": "6.0.0", - "numberfield": "0.2.2", - "numbers": "9.0.1", - "oak": "3.1.1", - "oak-debug": "1.2.2", - "object-maps": "0.3.0", - "ocarina": "1.5.4", - "oooooooooorrrrrrrmm-lib": "0.0.1", - "open-colors-scales-and-schemes": "1.0.0", - "open-folds": "6.4.0", - "open-foreign-generic": "11.0.3", - "open-memoize": "6.2.0", - "open-mkdirp-aff": "1.2.0", - "open-pairing": "6.2.0", - "open-smolder": "12.0.2", - "options": "7.0.0", - "optparse": "5.0.1", - "ordered-collections": "3.2.0", - "ordered-set": "0.4.0", - "orders": "6.0.0", - "owoify": "1.2.0", - "pairs": "9.0.1", - "parallel": "7.0.0", - "parsing": "10.3.0", - "parsing-dataview": "3.2.4", - "partial": "4.0.0", - "pathy": "9.0.0", - "pha": "0.13.0", - "phaser": "0.7.0", - "phylio": "1.1.2", - "pipes": "8.0.0", - "pirates-charm": "0.0.1", - "pmock": "0.9.0", - "point-free": "1.0.0", - "pointed-list": "0.5.1", - "polymorphic-vectors": "4.0.0", - "posix-types": "6.0.0", - "postgresql": "2.0.20", - "precise": "6.0.0", - "precise-datetime": "7.0.0", - "prelude": "6.0.2", - "prettier-printer": "3.0.0", - "printf": "0.1.0", - "priority-queue": "0.1.2", - "profunctor": "6.0.1", - "profunctor-lenses": "8.0.0", - "protobuf": "4.4.0", - "psa-utils": "8.0.0", - "psci-support": "6.0.0", - "punycode": "1.0.0", - "qualified-do": "2.2.0", - "quantities": "12.2.0", - "quickcheck": "8.0.1", - "quickcheck-combinators": "0.1.3", - "quickcheck-laws": "7.0.0", - "quickcheck-utf8": "0.0.0", - "random": "6.0.0", - "rationals": "6.0.0", - "rdf": "0.1.0", - "react": "11.0.0", - "react-aria": "0.2.0", - "react-basic": "17.0.0", - "react-basic-classic": "3.0.0", - "react-basic-dnd": "10.1.0", - "react-basic-dom": "7.0.0", - "react-basic-dom-beta": "0.1.1", - "react-basic-emotion": "7.1.0", - "react-basic-hooks": "8.2.0", - "react-basic-storybook": "2.0.0", - "react-dom": "8.0.0", - "react-halo": "3.0.0", - "react-icons": "1.1.5", - "react-markdown": "0.1.0", - "react-testing-library": "4.0.1", - "react-virtuoso": "1.0.0", - "reactix": "0.6.1", - "read": "1.0.1", - "recharts": "1.1.0", - "record": "4.0.0", - "record-extra": "5.0.1", - "record-extra-srghma": "0.1.1", - "record-ptional-fields": "0.1.2", - "record-studio": "1.0.4", - "refs": "6.0.0", - "remotedata": "5.0.1", - "repr": "0.5.0", - "resize-arrays": "0.0.1", - "resize-observer": "1.0.0", - "resource": "2.0.1", - "resourcet": "1.0.0", - "result": "1.0.3", - "return": "0.2.0", - "ring-modules": "5.0.1", - "rito": "0.3.4", - "roman": "0.4.0", - "rough-notation": "1.0.2", - "routing": "11.0.0", - "routing-duplex": "0.7.0", - "run": "5.0.0", - "safe-coerce": "2.0.0", - "safely": "4.0.1", - "school-of-music": "1.3.0", - "selection-foldable": "0.2.0", - "selective-functors": "1.0.1", - "semirings": "7.0.0", - "shuffle": "1.1.0", - "signal": "13.0.0", - "simple-emitter": "3.0.1", - "simple-i18n": "2.0.1", - "simple-json": "9.0.0", - "simple-json-generics": "0.2.1", - "simple-ulid": "3.0.0", - "sized-matrices": "1.0.0", - "sized-vectors": "5.0.2", - "slug": "3.1.0", - "small-ffi": "4.0.1", - "soundfonts": "4.1.0", - "sparse-matrices": "2.0.1", - "sparse-polynomials": "3.0.1", - "spec": "8.1.1", - "spec-discovery": "8.4.0", - "spec-mocha": "5.1.1", - "spec-node": "0.0.3", - "spec-quickcheck": "5.0.2", - "spec-reporter-xunit": "0.7.1", - "splitmix": "2.1.0", - "ssrs": "1.0.0", - "st": "6.2.0", - "statistics": "0.3.2", - "strictlypositiveint": "1.0.1", - "string-parsers": "8.0.0", - "strings": "6.0.1", - "strings-extra": "4.0.0", - "stringutils": "0.0.12", - "substitute": "0.2.3", - "supply": "0.2.0", - "svg-parser": "3.0.0", - "systemd-journald": "0.3.0", - "tagged": "4.0.2", - "tailrec": "6.1.0", - "tanstack-query": "2.0.0", - "tecton": "0.2.1", - "tecton-halogen": "0.2.0", - "test-unit": "17.0.0", - "thermite": "6.3.1", - "thermite-dom": "0.3.1", - "these": "6.0.0", - "threading": "0.0.3", - "tidy": "0.11.1", - "tidy-codegen": "4.0.1", - "tldr": "0.0.0", - "toestand": "0.9.0", - "transformation-matrix": "1.0.1", - "transformers": "6.1.0", - "tree-rose": "4.0.2", - "trivial-unfold": "0.5.0", - "ts-bridge": "4.0.0", - "tuples": "7.0.0", - "two-or-more": "1.0.0", - "type-equality": "4.0.1", - "typedenv": "2.0.1", - "typelevel": "6.0.0", - "typelevel-lists": "2.1.0", - "typelevel-peano": "1.0.1", - "typelevel-prelude": "7.0.0", - "typelevel-regex": "0.0.3", - "typelevel-rows": "0.1.0", - "typisch": "0.4.0", - "uint": "7.0.0", - "ulid": "3.0.1", - "uncurried-transformers": "1.1.0", - "undefined": "2.0.0", - "undefined-is-not-a-problem": "1.1.0", - "unfoldable": "6.0.0", - "unicode": "6.0.0", - "unique": "0.6.1", - "unlift": "1.0.1", - "unordered-collections": "3.1.0", - "unsafe-coerce": "6.0.0", - "unsafe-reference": "5.0.0", - "untagged-to-tagged": "0.1.4", - "untagged-union": "1.0.0", - "uri": "9.0.0", - "url-immutable": "1.0.0", - "url-regex-safe": "0.1.1", - "uuid": "9.0.0", - "uuidv4": "1.0.0", - "validation": "6.0.0", - "variant": "8.0.0", - "variant-encodings": "2.0.0", - "variant-gen": "1.0.0", - "vectorfield": "1.0.1", - "vectors": "2.1.0", - "versions": "7.0.0", - "visx": "0.0.2", - "vitest": "1.0.0", - "web-clipboard": "6.0.0", - "web-cssom": "2.0.0", - "web-cssom-view": "0.1.0", - "web-dom": "6.0.0", - "web-dom-parser": "8.0.0", - "web-dom-xpath": "3.0.0", - "web-encoding": "3.0.0", - "web-events": "4.0.0", - "web-fetch": "4.0.1", - "web-file": "4.0.0", - "web-geometry": "0.1.0", - "web-html": "4.1.0", - "web-pointerevents": "2.0.0", - "web-proletarian": "1.0.0", - "web-promise": "3.2.0", - "web-resize-observer": "2.1.0", - "web-router": "1.0.0", - "web-socket": "4.0.0", - "web-storage": "5.0.0", - "web-streams": "4.0.0", - "web-touchevents": "4.0.0", - "web-uievents": "5.0.0", - "web-url": "2.0.0", - "web-workers": "1.1.0", - "web-xhr": "5.0.1", - "webextension-polyfill": "0.1.0", - "webgpu": "0.0.1", - "which": "2.0.0", - "whine-core": "0.0.28", - "xterm": "1.0.0", - "yoga-fetch": "1.0.1", - "yoga-json": "5.1.0", - "yoga-om": "0.1.0", - "yoga-postgres": "6.0.0", - "yoga-react-dom": "1.0.1", - "yoga-subtlecrypto": "0.1.0", - "yoga-tree": "1.0.0", - "z3": "0.0.2", - "zipperarray": "2.0.0" - } - }, - "extra_packages": { - "lists": { - "path": ".." - } - } - }, - "packages": {} -} diff --git a/quickcheck/spago.yaml b/quickcheck/spago.yaml deleted file mode 100644 index 2975a02..0000000 --- a/quickcheck/spago.yaml +++ /dev/null @@ -1,33 +0,0 @@ -package: - name: lists-spec-tests - description: spago@next-enabled tests for lists using packages that depend on it - dependencies: - - prelude: ">=6.0.2 <7.0.0" - - lists: ">=7.0.0 <8.0.0" - - quickcheck: ">=8.0.1 <9.0.0" - - spec: ">=8.1.1 <9.0.0" - - spec-quickcheck: ">=5.0.2 <6.0.0" - - spec-node: ">=0.0.3 <0.1.0" - test: - main: Test.Main - dependencies: - [] -workspace: - packageSet: - registry: 64.6.0 - extraPackages: - lists: - path: .. - dependencies: - - bifunctors - - control - - foldable-traversable - - lazy - - maybe - - newtype - - nonempty - - partial - - prelude - - tailrec - - tuples - - unfoldable diff --git a/quickcheck/test/Test/Main.purs b/test/Test/ClassLaws.purs similarity index 100% rename from quickcheck/test/Test/Main.purs rename to test/Test/ClassLaws.purs From 147deb1aacdc31499de1f172b87455ca657de657 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:27:34 -0400 Subject: [PATCH 15/34] ...wait this might actually work. just. the same thing but with bower instead of spago lol --- .gitignore | 4 ++++ bower.json | 6 +----- quickcheck/bower.json | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 quickcheck/bower.json diff --git a/.gitignore b/.gitignore index 7ebd961..c84772b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ /node_modules/ /output/ package-lock.json + +/quickcheck/bower_components/ +/quickcheck/output/ +/quickcheck/.* diff --git a/bower.json b/bower.json index b834dd9..62188ce 100644 --- a/bower.json +++ b/bower.json @@ -36,10 +36,6 @@ "purescript-arrays": "^7.0.0", "purescript-assert": "^6.0.0", "purescript-console": "^6.0.0", - "purescript-minibench": "^4.0.0", - "purescript-quickcheck": "^8.0.1", - "purescript-spec": "^8.1.1", - "purescript-spec-quickcheck": "^5.0.2", - "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" + "purescript-minibench": "^4.0.0" } } diff --git a/quickcheck/bower.json b/quickcheck/bower.json new file mode 100644 index 0000000..bc0a799 --- /dev/null +++ b/quickcheck/bower.json @@ -0,0 +1,16 @@ +{ + "name": "lists-quickcheck-tests", + "authors": [ + "UnrelatedString " + ], + "dependencies": { + "purescript-lists": "../bower.json", + "purescript-quickcheck": "^8.0.1", + "purescript-spec": "^8.1.1", + "purescript-spec-quickcheck": "^5.0.2", + "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" + }, + "resolutions": { + "purescript-lists": "*" + } +} From 67d59806c49e07275fcec44809ebfdd51912c2da Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:49:49 -0400 Subject: [PATCH 16/34] all that to add transitive dependencies for the one thing that doesn't exist on bower and I still get four modules not found ;_; --- .github/workflows/ci.yml | 4 ++- package.json | 1 + quickcheck/bower.json | 26 +++++++++++++++++++ .../test/Test/Main.purs | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) rename test/Test/ClassLaws.purs => quickcheck/test/Test/Main.purs (97%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46f0422..97ad285 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,4 +32,6 @@ jobs: - name: Run tests run: | bower install - npm run-script test --if-present + npm run test + npm run testsubdir + diff --git a/package.json b/package.json index be00cb4..0d20290 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "clean": "rimraf output && rimraf .pulp-cache", "build": "pulp build -- --censor-lib --strict", "test": "pulp test", + "testsubdir": "cd quickcheck; bower install --force-latest && pulp test", "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", "bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'", "bench": "npm run bench:build && npm run bench:run" diff --git a/quickcheck/bower.json b/quickcheck/bower.json index bc0a799..e8c3f7e 100644 --- a/quickcheck/bower.json +++ b/quickcheck/bower.json @@ -5,9 +5,35 @@ ], "dependencies": { "purescript-lists": "../bower.json", + "purescript-prelude": "^6.0.0", "purescript-quickcheck": "^8.0.1", "purescript-spec": "^8.1.1", "purescript-spec-quickcheck": "^5.0.2", + + "purescript-aff": ">=7.1.0 <8.0.0", + "purescript-argonaut-codecs": ">=9.1.0 <10.0.0", + "purescript-argonaut-core": ">=7.0.0 <8.0.0", + "purescript-arrays": ">=7.3.0 <8.0.0", + "purescript-control": ">=6.0.0 <7.0.0", + "purescript-datetime": ">=6.1.0 <7.0.0", + "purescript-effect": ">=4.0.0 <5.0.0", + "purescript-either": ">=6.1.0 <7.0.0", + "purescript-foldable-traversable": ">=6.0.0 <7.0.0", + "purescript-identity": ">=6.0.0 <7.0.0", + "purescript-integers": ">=6.0.0 <7.0.0", + "purescript-maybe": ">=6.0.0 <7.0.0", + "purescript-newtype": ">=5.0.0 <6.0.0", + "purescript-node-buffer": ">=9.0.0 <10.0.0", + "purescript-node-fs": ">=9.2.0 <10.0.0", + "purescript-node-process": ">=11.2.0 <12.0.0", + "purescript-now": ">=6.0.0 <7.0.0", + "purescript-numbers": ">=9.0.1 <10.0.0", + "purescript-optparse": ">=5.0.0 <6.0.0", + "purescript-ordered-collections": ">=3.2.0 <4.0.0", + "purescript-partial": ">=4.0.0 <5.0.0", + "purescript-strings": ">=6.0.1 <7.0.0", + "purescript-tuples": ">=7.0.0 <8.0.0", + "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" }, "resolutions": { diff --git a/test/Test/ClassLaws.purs b/quickcheck/test/Test/Main.purs similarity index 97% rename from test/Test/ClassLaws.purs rename to quickcheck/test/Test/Main.purs index cb0d235..2bb1033 100644 --- a/test/Test/ClassLaws.purs +++ b/quickcheck/test/Test/Main.purs @@ -1,4 +1,4 @@ -module Test.ClassLaws where +module Test.Main where import Prelude From 685798444febb2a53bc6fa72a8a1edcbbe9b85ff Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 18:57:37 -0400 Subject: [PATCH 17/34] that line is LITERALLY NOT IN THE LOCAL COPY of course somehow the force latest thing messed up the existing committed resolve and now I just have to save it all manually don't I --- quickcheck/bower.json | 1 + 1 file changed, 1 insertion(+) diff --git a/quickcheck/bower.json b/quickcheck/bower.json index e8c3f7e..980b4b2 100644 --- a/quickcheck/bower.json +++ b/quickcheck/bower.json @@ -14,6 +14,7 @@ "purescript-argonaut-codecs": ">=9.1.0 <10.0.0", "purescript-argonaut-core": ">=7.0.0 <8.0.0", "purescript-arrays": ">=7.3.0 <8.0.0", + "purescript-catenable-lists": ">=7.0.0 <8.0.0", "purescript-control": ">=6.0.0 <7.0.0", "purescript-datetime": ">=6.1.0 <7.0.0", "purescript-effect": ">=4.0.0 <5.0.0", From 4027829356bba6c15600df30ef570f473866c4d0 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:02:27 -0400 Subject: [PATCH 18/34] WHATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT --- package.json | 2 +- quickcheck/bower.json | 29 ++++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0d20290..6b2b222 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "clean": "rimraf output && rimraf .pulp-cache", "build": "pulp build -- --censor-lib --strict", "test": "pulp test", - "testsubdir": "cd quickcheck; bower install --force-latest && pulp test", + "testsubdir": "cd quickcheck; bower install && pulp test", "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", "bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'", "bench": "npm run bench:build && npm run bench:run" diff --git a/quickcheck/bower.json b/quickcheck/bower.json index 980b4b2..4d781e8 100644 --- a/quickcheck/bower.json +++ b/quickcheck/bower.json @@ -9,7 +9,6 @@ "purescript-quickcheck": "^8.0.1", "purescript-spec": "^8.1.1", "purescript-spec-quickcheck": "^5.0.2", - "purescript-aff": ">=7.1.0 <8.0.0", "purescript-argonaut-codecs": ">=9.1.0 <10.0.0", "purescript-argonaut-core": ">=7.0.0 <8.0.0", @@ -34,10 +33,34 @@ "purescript-partial": ">=4.0.0 <5.0.0", "purescript-strings": ">=6.0.1 <7.0.0", "purescript-tuples": ">=7.0.0 <8.0.0", - "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" }, "resolutions": { - "purescript-lists": "*" + "purescript-lists": "*", + "purescript-prelude": "^6.0.0", + "purescript-bifunctors": "^6.0.0", + "purescript-const": "^6.0.0", + "purescript-invariant": "^6.0.0", + "purescript-safe-coerce": "^2.0.0", + "purescript-unsafe-coerce": "^6.0.0", + "purescript-lazy": "^6.0.0", + "purescript-nonempty": "^7.0.0", + "purescript-tailrec": "^6.0.0", + "purescript-refs": "^6.0.0", + "purescript-distributive": "^6.0.0", + "purescript-unfoldable": "^6.0.0", + "purescript-functors": "^5.0.0", + "purescript-contravariant": "^6.0.0", + "purescript-profunctor": "^6.0.0", + "purescript-exists": "^6.0.0", + "purescript-control": ">=6.0.0 <7.0.0", + "purescript-effect": "^4.0.0", + "purescript-either": "^6.0.0", + "purescript-foldable-traversable": ">=6.0.0 <7.0.0", + "purescript-identity": "^6.0.0", + "purescript-maybe": ">=6.0.0 <7.0.0", + "purescript-newtype": ">=5.0.0 <6.0.0", + "purescript-partial": ">=4.0.0 <5.0.0", + "purescript-tuples": ">=7.0.0 <8.0.0" } } From f75feca1a5ded5b597496655954510f55f775518 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:08:15 -0400 Subject: [PATCH 19/34] AAHAKFHKHAHAHAHFASHFJSHFJASFH?AJSFHASDFHAWJFHASFGASHDFAJSERFHASERFL . does give me an idea though --- package.json | 2 +- quickcheck/bower.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 6b2b222..0c253d4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "clean": "rimraf output && rimraf .pulp-cache", "build": "pulp build -- --censor-lib --strict", "test": "pulp test", - "testsubdir": "cd quickcheck; bower install && pulp test", + "testsubdir": "cd quickcheck; bower install && cp -r ../src bower_components/purescript-lists && pulp test", "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", "bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'", "bench": "npm run bench:build && npm run bench:run" diff --git a/quickcheck/bower.json b/quickcheck/bower.json index 4d781e8..1eb9029 100644 --- a/quickcheck/bower.json +++ b/quickcheck/bower.json @@ -36,7 +36,6 @@ "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" }, "resolutions": { - "purescript-lists": "*", "purescript-prelude": "^6.0.0", "purescript-bifunctors": "^6.0.0", "purescript-const": "^6.0.0", From 83a1ee99fb79df04908756c7d54fb7ff1359609c Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:13:56 -0400 Subject: [PATCH 20/34] ...also fixing errors in the test code while I'm at it... --- package.json | 2 +- quickcheck/bower.json | 65 -- quickcheck/spago.lock | 1719 ++++++++++++++++++++++++++++++++ quickcheck/spago.yaml | 16 + quickcheck/test/Test/Main.purs | 10 +- 5 files changed, 1741 insertions(+), 71 deletions(-) delete mode 100644 quickcheck/bower.json create mode 100644 quickcheck/spago.lock create mode 100644 quickcheck/spago.yaml diff --git a/package.json b/package.json index 0c253d4..c3e2398 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "clean": "rimraf output && rimraf .pulp-cache", "build": "pulp build -- --censor-lib --strict", "test": "pulp test", - "testsubdir": "cd quickcheck; bower install && cp -r ../src bower_components/purescript-lists && pulp test", + "testsubdir": "cd quickcheck; spago test", "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", "bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'", "bench": "npm run bench:build && npm run bench:run" diff --git a/quickcheck/bower.json b/quickcheck/bower.json deleted file mode 100644 index 1eb9029..0000000 --- a/quickcheck/bower.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "lists-quickcheck-tests", - "authors": [ - "UnrelatedString " - ], - "dependencies": { - "purescript-lists": "../bower.json", - "purescript-prelude": "^6.0.0", - "purescript-quickcheck": "^8.0.1", - "purescript-spec": "^8.1.1", - "purescript-spec-quickcheck": "^5.0.2", - "purescript-aff": ">=7.1.0 <8.0.0", - "purescript-argonaut-codecs": ">=9.1.0 <10.0.0", - "purescript-argonaut-core": ">=7.0.0 <8.0.0", - "purescript-arrays": ">=7.3.0 <8.0.0", - "purescript-catenable-lists": ">=7.0.0 <8.0.0", - "purescript-control": ">=6.0.0 <7.0.0", - "purescript-datetime": ">=6.1.0 <7.0.0", - "purescript-effect": ">=4.0.0 <5.0.0", - "purescript-either": ">=6.1.0 <7.0.0", - "purescript-foldable-traversable": ">=6.0.0 <7.0.0", - "purescript-identity": ">=6.0.0 <7.0.0", - "purescript-integers": ">=6.0.0 <7.0.0", - "purescript-maybe": ">=6.0.0 <7.0.0", - "purescript-newtype": ">=5.0.0 <6.0.0", - "purescript-node-buffer": ">=9.0.0 <10.0.0", - "purescript-node-fs": ">=9.2.0 <10.0.0", - "purescript-node-process": ">=11.2.0 <12.0.0", - "purescript-now": ">=6.0.0 <7.0.0", - "purescript-numbers": ">=9.0.1 <10.0.0", - "purescript-optparse": ">=5.0.0 <6.0.0", - "purescript-ordered-collections": ">=3.2.0 <4.0.0", - "purescript-partial": ">=4.0.0 <5.0.0", - "purescript-strings": ">=6.0.1 <7.0.0", - "purescript-tuples": ">=7.0.0 <8.0.0", - "purescript-spec-node": "purescript-spec/purescript-spec-node#^0.0.3" - }, - "resolutions": { - "purescript-prelude": "^6.0.0", - "purescript-bifunctors": "^6.0.0", - "purescript-const": "^6.0.0", - "purescript-invariant": "^6.0.0", - "purescript-safe-coerce": "^2.0.0", - "purescript-unsafe-coerce": "^6.0.0", - "purescript-lazy": "^6.0.0", - "purescript-nonempty": "^7.0.0", - "purescript-tailrec": "^6.0.0", - "purescript-refs": "^6.0.0", - "purescript-distributive": "^6.0.0", - "purescript-unfoldable": "^6.0.0", - "purescript-functors": "^5.0.0", - "purescript-contravariant": "^6.0.0", - "purescript-profunctor": "^6.0.0", - "purescript-exists": "^6.0.0", - "purescript-control": ">=6.0.0 <7.0.0", - "purescript-effect": "^4.0.0", - "purescript-either": "^6.0.0", - "purescript-foldable-traversable": ">=6.0.0 <7.0.0", - "purescript-identity": "^6.0.0", - "purescript-maybe": ">=6.0.0 <7.0.0", - "purescript-newtype": ">=5.0.0 <6.0.0", - "purescript-partial": ">=4.0.0 <5.0.0", - "purescript-tuples": ">=7.0.0 <8.0.0" - } -} diff --git a/quickcheck/spago.lock b/quickcheck/spago.lock new file mode 100644 index 0000000..4ea99d5 --- /dev/null +++ b/quickcheck/spago.lock @@ -0,0 +1,1719 @@ +{ + "workspace": { + "packages": { + "lists-spec-tests": { + "path": "./", + "core": { + "dependencies": [ + { + "prelude": ">=6.0.2 <7.0.0" + }, + { + "quickcheck": ">=8.0.1 <9.0.0" + }, + { + "spec": ">=8.1.1 <9.0.0" + }, + { + "spec-node": ">=0.0.3 <0.1.0" + }, + { + "spec-quickcheck": ">=5.0.2 <6.0.0" + } + ], + "build_plan": [ + "aff", + "ansi", + "argonaut-codecs", + "argonaut-core", + "arraybuffer-types", + "arrays", + "avar", + "bifunctors", + "catenable-lists", + "console", + "const", + "contravariant", + "control", + "datetime", + "distributive", + "effect", + "either", + "enums", + "exceptions", + "exists", + "exitcodes", + "foldable-traversable", + "foreign", + "foreign-object", + "fork", + "free", + "functions", + "functors", + "gen", + "identity", + "integers", + "invariant", + "js-date", + "lazy", + "lcg", + "lists", + "maybe", + "mmorph", + "newtype", + "node-buffer", + "node-event-emitter", + "node-fs", + "node-path", + "node-process", + "node-streams", + "nonempty", + "now", + "nullable", + "numbers", + "open-memoize", + "optparse", + "ordered-collections", + "orders", + "parallel", + "partial", + "pipes", + "posix-types", + "prelude", + "profunctor", + "quickcheck", + "random", + "record", + "refs", + "safe-coerce", + "spec", + "spec-node", + "spec-quickcheck", + "st", + "strings", + "tailrec", + "transformers", + "tuples", + "type-equality", + "typelevel-prelude", + "unfoldable", + "unsafe-coerce" + ] + }, + "test": { + "dependencies": [], + "build_plan": [] + } + } + }, + "package_set": { + "address": { + "registry": "64.6.0" + }, + "compiler": ">=0.15.15 <0.16.0", + "content": { + "abc-parser": "2.0.1", + "ace": "9.1.0", + "address-rfc2821": "0.1.1", + "aff": "8.0.0", + "aff-bus": "6.0.0", + "aff-coroutines": "9.0.0", + "aff-promise": "4.0.0", + "aff-retry": "2.0.0", + "affjax": "13.0.0", + "affjax-node": "1.0.0", + "affjax-web": "1.0.0", + "ansi": "7.0.0", + "apexcharts": "0.5.0", + "applicative-phases": "1.0.0", + "argonaut": "9.0.0", + "argonaut-aeson-generic": "0.4.1", + "argonaut-codecs": "9.1.0", + "argonaut-core": "7.0.0", + "argonaut-generic": "8.0.0", + "argonaut-traversals": "10.0.0", + "argparse-basic": "2.0.0", + "array-builder": "0.1.2", + "array-search": "0.6.0", + "arraybuffer": "13.2.0", + "arraybuffer-builder": "3.1.0", + "arraybuffer-types": "3.0.2", + "arrays": "7.3.0", + "arrays-extra": "0.6.1", + "arrays-zipper": "2.0.1", + "ask": "1.0.0", + "assert": "6.0.0", + "assert-multiple": "0.4.0", + "avar": "5.0.1", + "b64": "0.0.8", + "barbies": "1.0.1", + "barlow-lens": "0.9.0", + "benchlib": "0.0.4", + "bifunctors": "6.1.0", + "bigints": "7.0.1", + "bolson": "0.3.9", + "bookhound": "0.1.7", + "bower-json": "3.0.0", + "call-by-name": "4.0.1", + "canvas": "6.0.0", + "canvas-action": "9.0.0", + "cartesian": "1.0.6", + "catenable-lists": "7.0.0", + "cbor-stream": "1.3.0", + "chameleon": "1.0.0", + "chameleon-halogen": "1.0.3", + "chameleon-react-basic": "1.1.0", + "chameleon-styled": "2.5.0", + "chameleon-transformers": "1.0.0", + "channel": "1.0.0", + "checked-exceptions": "3.1.1", + "choku": "1.0.2", + "classless": "0.1.1", + "classless-arbitrary": "0.1.1", + "classless-decode-json": "0.1.1", + "classless-encode-json": "0.1.3", + "classnames": "2.0.0", + "codec": "6.1.0", + "codec-argonaut": "10.0.0", + "codec-json": "2.0.0", + "colors": "7.0.1", + "concur-core": "0.5.0", + "concur-react": "0.5.0", + "concurrent-queues": "3.0.0", + "console": "6.1.0", + "const": "6.0.0", + "contravariant": "6.0.0", + "control": "6.0.0", + "convertable-options": "1.0.0", + "coroutines": "7.0.0", + "css": "6.0.0", + "css-class-name-extractor": "0.0.4", + "css-frameworks": "1.0.1", + "csv-stream": "2.3.0", + "data-mvc": "0.0.2", + "datetime": "6.1.0", + "datetime-parsing": "0.2.0", + "debounce": "0.1.0", + "debug": "6.0.2", + "decimals": "7.1.0", + "default-values": "1.0.1", + "deku": "0.9.23", + "deno": "0.0.5", + "dissect": "1.0.0", + "distributive": "6.0.0", + "dodo-printer": "2.2.3", + "dom-filereader": "7.0.0", + "dom-indexed": "12.0.0", + "dom-simple": "0.4.0", + "dotenv": "4.0.3", + "droplet": "0.6.0", + "dts": "1.0.0", + "dual-numbers": "1.0.3", + "dynamic-buffer": "3.0.1", + "echarts-simple": "0.0.1", + "effect": "4.0.0", + "either": "6.1.0", + "elmish": "0.13.0", + "elmish-enzyme": "0.1.1", + "elmish-hooks": "0.10.3", + "elmish-html": "0.9.0", + "elmish-testing-library": "0.3.2", + "email-validate": "7.0.0", + "encoding": "0.0.9", + "enums": "6.0.1", + "env-names": "0.4.0", + "error": "2.0.0", + "eta-conversion": "0.3.2", + "exceptions": "6.1.0", + "exists": "6.0.0", + "exitcodes": "4.0.0", + "expect-inferred": "3.0.0", + "express": "0.9.1", + "ezfetch": "1.1.0", + "fahrtwind": "2.0.0", + "fakerjs": "0.0.1", + "fallback": "0.1.0", + "fast-vect": "1.2.0", + "fetch": "4.1.0", + "fetch-argonaut": "1.0.1", + "fetch-core": "5.1.0", + "fetch-yoga-json": "1.1.0", + "ffi-simple": "0.5.1", + "fft-js": "0.1.0", + "filterable": "5.0.0", + "fix-functor": "0.1.0", + "fixed-points": "7.0.0", + "fixed-precision": "5.0.0", + "flame": "1.3.0", + "float32": "2.0.0", + "fmt": "0.2.1", + "foldable-traversable": "6.0.0", + "foldable-traversable-extra": "0.0.6", + "foreign": "7.0.0", + "foreign-object": "4.1.0", + "foreign-readwrite": "3.4.0", + "forgetmenot": "0.1.0", + "fork": "6.0.0", + "form-urlencoded": "7.0.0", + "formatters": "7.0.0", + "framer-motion": "1.0.1", + "free": "7.1.0", + "freeap": "7.0.0", + "freer-free": "0.0.1", + "freet": "7.0.0", + "functions": "6.0.0", + "functor1": "3.0.0", + "functors": "5.0.0", + "fuzzy": "0.4.0", + "gen": "4.0.0", + "generate-values": "1.0.1", + "generic-router": "0.0.1", + "geojson": "0.0.5", + "geometria": "2.2.0", + "gesso": "1.0.0", + "gojs": "0.1.1", + "golem-fetch": "0.1.0", + "grain": "3.0.0", + "grain-router": "3.0.0", + "grain-virtualized": "3.0.0", + "graphs": "8.1.0", + "group": "4.1.1", + "halogen": "7.0.0", + "halogen-bootstrap5": "5.3.2", + "halogen-canvas": "1.0.0", + "halogen-css": "10.0.0", + "halogen-declarative-canvas": "0.0.8", + "halogen-echarts-simple": "0.0.4", + "halogen-formless": "4.0.3", + "halogen-helix": "1.1.0", + "halogen-hooks": "0.6.3", + "halogen-hooks-extra": "0.9.0", + "halogen-infinite-scroll": "1.1.0", + "halogen-store": "0.5.4", + "halogen-storybook": "2.0.0", + "halogen-subscriptions": "2.0.0", + "halogen-svg-elems": "8.0.0", + "halogen-typewriter": "1.0.4", + "halogen-use-trigger-hooks": "1.0.0", + "halogen-vdom": "8.0.0", + "halogen-vdom-string-renderer": "0.5.0", + "halogen-xterm": "2.0.0", + "heckin": "2.0.1", + "heterogeneous": "0.6.0", + "homogeneous": "0.4.0", + "http-methods": "6.0.0", + "httpurple": "4.0.0", + "huffman": "0.4.0", + "humdrum": "0.0.1", + "hyrule": "2.3.8", + "identity": "6.0.0", + "identy": "4.0.1", + "indexed-db": "1.0.0", + "indexed-monad": "3.0.0", + "int64": "3.0.0", + "integers": "6.0.0", + "interpolate": "5.0.2", + "intersection-observer": "1.0.1", + "invariant": "6.0.0", + "jarilo": "1.0.1", + "jelly": "0.10.0", + "jelly-router": "0.3.0", + "jelly-signal": "0.4.0", + "jest": "1.0.0", + "js-abort-controller": "1.0.0", + "js-bigints": "2.2.1", + "js-date": "8.0.0", + "js-fetch": "0.2.1", + "js-fileio": "3.0.0", + "js-intl": "1.1.4", + "js-iterators": "0.1.1", + "js-maps": "0.1.2", + "js-promise": "1.0.0", + "js-promise-aff": "1.0.0", + "js-timers": "6.1.0", + "js-uri": "3.1.0", + "jsdom": "1.0.0", + "json": "1.1.0", + "json-codecs": "5.0.0", + "justifill": "0.5.0", + "jwt": "0.0.9", + "labeled-data": "0.2.0", + "language-cst-parser": "0.14.1", + "lazy": "6.0.0", + "lazy-joe": "1.0.0", + "lcg": "4.0.0", + "leibniz": "5.0.0", + "leveldb": "1.0.1", + "liminal": "1.0.1", + "linalg": "6.0.0", + "lists": "7.0.0", + "literals": "1.0.2", + "logging": "3.0.0", + "logging-journald": "0.4.0", + "lumi-components": "18.0.0", + "machines": "7.0.0", + "maps-eager": "0.5.0", + "marionette": "1.0.0", + "marionette-react-basic-hooks": "0.1.1", + "marked": "0.1.0", + "matrices": "5.0.1", + "matryoshka": "1.0.0", + "maybe": "6.0.0", + "media-types": "6.0.0", + "meowclient": "1.0.0", + "midi": "4.0.0", + "milkis": "9.0.0", + "minibench": "4.0.1", + "mmorph": "7.0.0", + "monad-control": "5.0.0", + "monad-logger": "1.3.1", + "monad-loops": "0.5.0", + "monad-unlift": "1.0.1", + "monoid-extras": "0.0.1", + "monoidal": "0.16.0", + "morello": "0.4.0", + "mote": "3.0.0", + "motsunabe": "2.0.0", + "mvc": "0.0.1", + "mysql": "6.0.1", + "n3": "0.1.0", + "nano-id": "1.1.0", + "nanoid": "0.1.0", + "naturals": "3.0.0", + "nested-functor": "0.2.1", + "newtype": "5.0.0", + "nextjs": "0.1.1", + "nextui": "0.2.0", + "node-buffer": "9.0.0", + "node-child-process": "11.1.0", + "node-event-emitter": "3.0.0", + "node-execa": "5.0.0", + "node-fs": "9.2.0", + "node-glob-basic": "2.0.0", + "node-http": "9.1.0", + "node-http2": "1.1.1", + "node-human-signals": "1.0.0", + "node-net": "5.1.0", + "node-os": "5.1.0", + "node-path": "5.0.1", + "node-process": "11.2.0", + "node-readline": "8.1.1", + "node-sqlite3": "8.0.0", + "node-stream-pipes": "2.1.6", + "node-streams": "9.0.1", + "node-tls": "0.3.1", + "node-url": "7.0.1", + "node-workerbees": "0.3.1", + "node-zlib": "0.4.0", + "nonempty": "7.0.0", + "now": "6.0.0", + "npm-package-json": "2.0.0", + "nullable": "6.0.0", + "numberfield": "0.2.2", + "numbers": "9.0.1", + "oak": "3.1.1", + "oak-debug": "1.2.2", + "object-maps": "0.3.0", + "ocarina": "1.5.4", + "oooooooooorrrrrrrmm-lib": "0.0.1", + "open-colors-scales-and-schemes": "1.0.0", + "open-folds": "6.4.0", + "open-foreign-generic": "11.0.3", + "open-memoize": "6.2.0", + "open-mkdirp-aff": "1.2.0", + "open-pairing": "6.2.0", + "open-smolder": "12.0.2", + "options": "7.0.0", + "optparse": "5.0.1", + "ordered-collections": "3.2.0", + "ordered-set": "0.4.0", + "orders": "6.0.0", + "owoify": "1.2.0", + "pairs": "9.0.1", + "parallel": "7.0.0", + "parsing": "10.3.0", + "parsing-dataview": "3.2.4", + "partial": "4.0.0", + "pathy": "9.0.0", + "pha": "0.13.0", + "phaser": "0.7.0", + "phylio": "1.1.2", + "pipes": "8.0.0", + "pirates-charm": "0.0.1", + "pmock": "0.9.0", + "point-free": "1.0.0", + "pointed-list": "0.5.1", + "polymorphic-vectors": "4.0.0", + "posix-types": "6.0.0", + "postgresql": "2.0.20", + "precise": "6.0.0", + "precise-datetime": "7.0.0", + "prelude": "6.0.2", + "prettier-printer": "3.0.0", + "printf": "0.1.0", + "priority-queue": "0.1.2", + "profunctor": "6.0.1", + "profunctor-lenses": "8.0.0", + "protobuf": "4.4.0", + "psa-utils": "8.0.0", + "psci-support": "6.0.0", + "punycode": "1.0.0", + "qualified-do": "2.2.0", + "quantities": "12.2.0", + "quickcheck": "8.0.1", + "quickcheck-combinators": "0.1.3", + "quickcheck-laws": "7.0.0", + "quickcheck-utf8": "0.0.0", + "random": "6.0.0", + "rationals": "6.0.0", + "rdf": "0.1.0", + "react": "11.0.0", + "react-aria": "0.2.0", + "react-basic": "17.0.0", + "react-basic-classic": "3.0.0", + "react-basic-dnd": "10.1.0", + "react-basic-dom": "7.0.0", + "react-basic-dom-beta": "0.1.1", + "react-basic-emotion": "7.1.0", + "react-basic-hooks": "8.2.0", + "react-basic-storybook": "2.0.0", + "react-dom": "8.0.0", + "react-halo": "3.0.0", + "react-icons": "1.1.5", + "react-markdown": "0.1.0", + "react-testing-library": "4.0.1", + "react-virtuoso": "1.0.0", + "reactix": "0.6.1", + "read": "1.0.1", + "recharts": "1.1.0", + "record": "4.0.0", + "record-extra": "5.0.1", + "record-extra-srghma": "0.1.1", + "record-ptional-fields": "0.1.2", + "record-studio": "1.0.4", + "refs": "6.0.0", + "remotedata": "5.0.1", + "repr": "0.5.0", + "resize-arrays": "0.0.1", + "resize-observer": "1.0.0", + "resource": "2.0.1", + "resourcet": "1.0.0", + "result": "1.0.3", + "return": "0.2.0", + "ring-modules": "5.0.1", + "rito": "0.3.4", + "roman": "0.4.0", + "rough-notation": "1.0.2", + "routing": "11.0.0", + "routing-duplex": "0.7.0", + "run": "5.0.0", + "safe-coerce": "2.0.0", + "safely": "4.0.1", + "school-of-music": "1.3.0", + "selection-foldable": "0.2.0", + "selective-functors": "1.0.1", + "semirings": "7.0.0", + "shuffle": "1.1.0", + "signal": "13.0.0", + "simple-emitter": "3.0.1", + "simple-i18n": "2.0.1", + "simple-json": "9.0.0", + "simple-json-generics": "0.2.1", + "simple-ulid": "3.0.0", + "sized-matrices": "1.0.0", + "sized-vectors": "5.0.2", + "slug": "3.1.0", + "small-ffi": "4.0.1", + "soundfonts": "4.1.0", + "sparse-matrices": "2.0.1", + "sparse-polynomials": "3.0.1", + "spec": "8.1.1", + "spec-discovery": "8.4.0", + "spec-mocha": "5.1.1", + "spec-node": "0.0.3", + "spec-quickcheck": "5.0.2", + "spec-reporter-xunit": "0.7.1", + "splitmix": "2.1.0", + "ssrs": "1.0.0", + "st": "6.2.0", + "statistics": "0.3.2", + "strictlypositiveint": "1.0.1", + "string-parsers": "8.0.0", + "strings": "6.0.1", + "strings-extra": "4.0.0", + "stringutils": "0.0.12", + "substitute": "0.2.3", + "supply": "0.2.0", + "svg-parser": "3.0.0", + "systemd-journald": "0.3.0", + "tagged": "4.0.2", + "tailrec": "6.1.0", + "tanstack-query": "2.0.0", + "tecton": "0.2.1", + "tecton-halogen": "0.2.0", + "test-unit": "17.0.0", + "thermite": "6.3.1", + "thermite-dom": "0.3.1", + "these": "6.0.0", + "threading": "0.0.3", + "tidy": "0.11.1", + "tidy-codegen": "4.0.1", + "tldr": "0.0.0", + "toestand": "0.9.0", + "transformation-matrix": "1.0.1", + "transformers": "6.1.0", + "tree-rose": "4.0.2", + "trivial-unfold": "0.5.0", + "ts-bridge": "4.0.0", + "tuples": "7.0.0", + "two-or-more": "1.0.0", + "type-equality": "4.0.1", + "typedenv": "2.0.1", + "typelevel": "6.0.0", + "typelevel-lists": "2.1.0", + "typelevel-peano": "1.0.1", + "typelevel-prelude": "7.0.0", + "typelevel-regex": "0.0.3", + "typelevel-rows": "0.1.0", + "typisch": "0.4.0", + "uint": "7.0.0", + "ulid": "3.0.1", + "uncurried-transformers": "1.1.0", + "undefined": "2.0.0", + "undefined-is-not-a-problem": "1.1.0", + "unfoldable": "6.0.0", + "unicode": "6.0.0", + "unique": "0.6.1", + "unlift": "1.0.1", + "unordered-collections": "3.1.0", + "unsafe-coerce": "6.0.0", + "unsafe-reference": "5.0.0", + "untagged-to-tagged": "0.1.4", + "untagged-union": "1.0.0", + "uri": "9.0.0", + "url-immutable": "1.0.0", + "url-regex-safe": "0.1.1", + "uuid": "9.0.0", + "uuidv4": "1.0.0", + "validation": "6.0.0", + "variant": "8.0.0", + "variant-encodings": "2.0.0", + "variant-gen": "1.0.0", + "vectorfield": "1.0.1", + "vectors": "2.1.0", + "versions": "7.0.0", + "visx": "0.0.2", + "vitest": "1.0.0", + "web-clipboard": "6.0.0", + "web-cssom": "2.0.0", + "web-cssom-view": "0.1.0", + "web-dom": "6.0.0", + "web-dom-parser": "8.0.0", + "web-dom-xpath": "3.0.0", + "web-encoding": "3.0.0", + "web-events": "4.0.0", + "web-fetch": "4.0.1", + "web-file": "4.0.0", + "web-geometry": "0.1.0", + "web-html": "4.1.0", + "web-pointerevents": "2.0.0", + "web-proletarian": "1.0.0", + "web-promise": "3.2.0", + "web-resize-observer": "2.1.0", + "web-router": "1.0.0", + "web-socket": "4.0.0", + "web-storage": "5.0.0", + "web-streams": "4.0.0", + "web-touchevents": "4.0.0", + "web-uievents": "5.0.0", + "web-url": "2.0.0", + "web-workers": "1.1.0", + "web-xhr": "5.0.1", + "webextension-polyfill": "0.1.0", + "webgpu": "0.0.1", + "which": "2.0.0", + "whine-core": "0.0.28", + "xterm": "1.0.0", + "yoga-fetch": "1.0.1", + "yoga-json": "5.1.0", + "yoga-om": "0.1.0", + "yoga-postgres": "6.0.0", + "yoga-react-dom": "1.0.1", + "yoga-subtlecrypto": "0.1.0", + "yoga-tree": "1.0.0", + "z3": "0.0.2", + "zipperarray": "2.0.0" + } + }, + "extra_packages": {} + }, + "packages": { + "aff": { + "type": "registry", + "version": "8.0.0", + "integrity": "sha256-5MmdI4+0RHBtSBy+YlU3/Cq4R5W2ih3OaRedJIrVHdk=", + "dependencies": [ + "bifunctors", + "control", + "datetime", + "effect", + "either", + "exceptions", + "foldable-traversable", + "functions", + "maybe", + "newtype", + "parallel", + "prelude", + "refs", + "tailrec", + "transformers", + "unsafe-coerce" + ] + }, + "ansi": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-ZMB6HD+q9CXvn9fRCmJ8dvuDrOVHcjombL3oNOerVnE=", + "dependencies": [ + "foldable-traversable", + "lists", + "strings" + ] + }, + "argonaut-codecs": { + "type": "registry", + "version": "9.1.0", + "integrity": "sha256-N6efXByUeg848ompEqJfVvZuZPfdRYDGlTDFn0G0Oh8=", + "dependencies": [ + "argonaut-core", + "arrays", + "effect", + "foreign-object", + "identity", + "integers", + "maybe", + "nonempty", + "ordered-collections", + "prelude", + "record" + ] + }, + "argonaut-core": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-RC82GfAjItydxrO24cdX373KHVZiLqybu19b5X8u7B4=", + "dependencies": [ + "arrays", + "control", + "either", + "foreign-object", + "functions", + "gen", + "maybe", + "nonempty", + "prelude", + "strings", + "tailrec" + ] + }, + "arraybuffer-types": { + "type": "registry", + "version": "3.0.2", + "integrity": "sha256-mQKokysYVkooS4uXbO+yovmV/s8b138Ws3zQvOwIHRA=", + "dependencies": [] + }, + "arrays": { + "type": "registry", + "version": "7.3.0", + "integrity": "sha256-tmcklBlc/muUtUfr9RapdCPwnlQeB3aSrC4dK85gQlc=", + "dependencies": [ + "bifunctors", + "control", + "foldable-traversable", + "functions", + "maybe", + "nonempty", + "partial", + "prelude", + "safe-coerce", + "st", + "tailrec", + "tuples", + "unfoldable", + "unsafe-coerce" + ] + }, + "avar": { + "type": "registry", + "version": "5.0.1", + "integrity": "sha256-f+bRR3qQPa/GVe4UbLQiJBy7+PzJkUCwT6qNn0UlkMY=", + "dependencies": [ + "aff", + "effect", + "either", + "exceptions", + "functions", + "maybe" + ] + }, + "bifunctors": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-6enQzl1vqnFTQZ1WX9BnoOOVdPGO9WZvVXldHckVQvY=", + "dependencies": [ + "const", + "either", + "newtype", + "prelude", + "tuples" + ] + }, + "catenable-lists": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-76vYENhwF4BWTBsjeLuErCH2jqVT4M3R1HX+4RwSftA=", + "dependencies": [ + "control", + "foldable-traversable", + "lists", + "maybe", + "prelude", + "tuples", + "unfoldable" + ] + }, + "console": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-CxmAzjgyuGDmt9FZW51VhV6rBPwR6o0YeKUzA9rSzcM=", + "dependencies": [ + "effect", + "prelude" + ] + }, + "const": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-tNrxDW8D8H4jdHE2HiPzpLy08zkzJMmGHdRqt5BQuTc=", + "dependencies": [ + "invariant", + "newtype", + "prelude" + ] + }, + "contravariant": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-TP+ooAp3vvmdjfQsQJSichF5B4BPDHp3wAJoWchip6c=", + "dependencies": [ + "const", + "either", + "newtype", + "prelude", + "tuples" + ] + }, + "control": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-sH7Pg9E96JCPF9PIA6oQ8+BjTyO/BH1ZuE/bOcyj4Jk=", + "dependencies": [ + "newtype", + "prelude" + ] + }, + "datetime": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-g/5X5BBegQWLpI9IWD+sY6mcaYpzzlW5lz5NBzaMtyI=", + "dependencies": [ + "bifunctors", + "control", + "either", + "enums", + "foldable-traversable", + "functions", + "gen", + "integers", + "lists", + "maybe", + "newtype", + "numbers", + "ordered-collections", + "partial", + "prelude", + "tuples" + ] + }, + "distributive": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-HTDdmEnzigMl+02SJB88j+gAXDx9VKsbvR4MJGDPbOQ=", + "dependencies": [ + "identity", + "newtype", + "prelude", + "tuples", + "type-equality" + ] + }, + "effect": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-eBtZu+HZcMa5HilvI6kaDyVX3ji8p0W9MGKy2K4T6+M=", + "dependencies": [ + "prelude" + ] + }, + "either": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-6hgTPisnMWVwQivOu2PKYcH8uqjEOOqDyaDQVUchTpY=", + "dependencies": [ + "control", + "invariant", + "maybe", + "prelude" + ] + }, + "enums": { + "type": "registry", + "version": "6.0.1", + "integrity": "sha256-HWaD73JFLorc4A6trKIRUeDMdzE+GpkJaEOM1nTNkC8=", + "dependencies": [ + "control", + "either", + "gen", + "maybe", + "newtype", + "nonempty", + "partial", + "prelude", + "tuples", + "unfoldable" + ] + }, + "exceptions": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-K0T89IHtF3vBY7eSAO7eDOqSb2J9kZGAcDN5+IKsF8E=", + "dependencies": [ + "effect", + "either", + "maybe", + "prelude" + ] + }, + "exists": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-A0JQHpTfo1dNOj9U5/Fd3xndlRSE0g2IQWOGor2yXn8=", + "dependencies": [ + "unsafe-coerce" + ] + }, + "exitcodes": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-4wxViTbyOoyKJ/WaRGI6+hZmgMKI5Miv16lSwefiLSM=", + "dependencies": [ + "enums" + ] + }, + "foldable-traversable": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-fLeqRYM4jUrZD5H4WqcwUgzU7XfYkzO4zhgtNc3jcWM=", + "dependencies": [ + "bifunctors", + "const", + "control", + "either", + "functors", + "identity", + "maybe", + "newtype", + "orders", + "prelude", + "tuples" + ] + }, + "foreign": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-1ORiqoS3HW+qfwSZAppHPWy4/6AQysxZ2t29jcdUMNA=", + "dependencies": [ + "either", + "functions", + "identity", + "integers", + "lists", + "maybe", + "prelude", + "strings", + "transformers" + ] + }, + "foreign-object": { + "type": "registry", + "version": "4.1.0", + "integrity": "sha256-q24okj6mT+yGHYQ+ei/pYPj5ih6sTbu7eDv/WU56JVo=", + "dependencies": [ + "arrays", + "foldable-traversable", + "functions", + "gen", + "lists", + "maybe", + "prelude", + "st", + "tailrec", + "tuples", + "typelevel-prelude", + "unfoldable" + ] + }, + "fork": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-X7u0SuCvFbLbzuNEKLBNuWjmcroqMqit4xEzpQwAP7E=", + "dependencies": [ + "aff" + ] + }, + "free": { + "type": "registry", + "version": "7.1.0", + "integrity": "sha256-JAumgEsGSzJCNLD8AaFvuX7CpqS5yruCngi6yI7+V5k=", + "dependencies": [ + "catenable-lists", + "control", + "distributive", + "either", + "exists", + "foldable-traversable", + "invariant", + "lazy", + "maybe", + "prelude", + "tailrec", + "transformers", + "tuples", + "unsafe-coerce" + ] + }, + "functions": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-adMyJNEnhGde2unHHAP79gPtlNjNqzgLB8arEOn9hLI=", + "dependencies": [ + "prelude" + ] + }, + "functors": { + "type": "registry", + "version": "5.0.0", + "integrity": "sha256-zfPWWYisbD84MqwpJSZFlvM6v86McM68ob8p9s27ywU=", + "dependencies": [ + "bifunctors", + "const", + "contravariant", + "control", + "distributive", + "either", + "invariant", + "maybe", + "newtype", + "prelude", + "profunctor", + "tuples", + "unsafe-coerce" + ] + }, + "gen": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-f7yzAXWwr+xnaqEOcvyO3ezKdoes8+WXWdXIHDBCAPI=", + "dependencies": [ + "either", + "foldable-traversable", + "identity", + "maybe", + "newtype", + "nonempty", + "prelude", + "tailrec", + "tuples", + "unfoldable" + ] + }, + "identity": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-4wY0XZbAksjY6UAg99WkuKyJlQlWAfTi2ssadH0wVMY=", + "dependencies": [ + "control", + "invariant", + "newtype", + "prelude" + ] + }, + "integers": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-sf+sK26R1hzwl3NhXR7WAu9zCDjQnfoXwcyGoseX158=", + "dependencies": [ + "maybe", + "numbers", + "prelude" + ] + }, + "invariant": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-RGWWyYrz0Hs1KjPDA+87Kia67ZFBhfJ5lMGOMCEFoLo=", + "dependencies": [ + "control", + "prelude" + ] + }, + "js-date": { + "type": "registry", + "version": "8.0.0", + "integrity": "sha256-6TVF4DWg5JL+jRAsoMssYw8rgOVALMUHT1CuNZt8NRo=", + "dependencies": [ + "datetime", + "effect", + "exceptions", + "foreign", + "integers", + "now" + ] + }, + "lazy": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-lMsfFOnlqfe4KzRRiW8ot5ge6HtcU3Eyh2XkXcP5IgU=", + "dependencies": [ + "control", + "foldable-traversable", + "invariant", + "prelude" + ] + }, + "lcg": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-h7ME5cthLfbgJOJdsZcSfFpwXsx4rf8YmhebU+3iSYg=", + "dependencies": [ + "effect", + "integers", + "maybe", + "partial", + "prelude", + "random" + ] + }, + "lists": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-EKF15qYqucuXP2lT/xPxhqy58f0FFT6KHdIB/yBOayI=", + "dependencies": [ + "bifunctors", + "control", + "foldable-traversable", + "lazy", + "maybe", + "newtype", + "nonempty", + "partial", + "prelude", + "tailrec", + "tuples", + "unfoldable" + ] + }, + "maybe": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-5cCIb0wPwbat2PRkQhUeZO0jcAmf8jCt2qE0wbC3v2Q=", + "dependencies": [ + "control", + "invariant", + "newtype", + "prelude" + ] + }, + "mmorph": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-urZlZNNqGeQFe5D/ClHlR8QgGBNHTMFPtJ5S5IpflTQ=", + "dependencies": [ + "free", + "functors", + "transformers" + ] + }, + "newtype": { + "type": "registry", + "version": "5.0.0", + "integrity": "sha256-gdrQu8oGe9eZE6L3wOI8ql/igOg+zEGB5ITh2g+uttw=", + "dependencies": [ + "prelude", + "safe-coerce" + ] + }, + "node-buffer": { + "type": "registry", + "version": "9.0.0", + "integrity": "sha256-PWE2DJ5ruBLCmeA/fUiuySEFmUJ/VuRfyrnCuVZBlu4=", + "dependencies": [ + "arraybuffer-types", + "effect", + "maybe", + "nullable", + "st", + "unsafe-coerce" + ] + }, + "node-event-emitter": { + "type": "registry", + "version": "3.0.0", + "integrity": "sha256-Qw0MjsT4xRH2j2i4K8JmRjcMKnH5z1Cw39t00q4LE4w=", + "dependencies": [ + "effect", + "either", + "functions", + "maybe", + "nullable", + "prelude", + "unsafe-coerce" + ] + }, + "node-fs": { + "type": "registry", + "version": "9.2.0", + "integrity": "sha256-Sg0vkXycEzkEerX6hLccz21Ygd9w1+QSk1thotRZPGI=", + "dependencies": [ + "datetime", + "effect", + "either", + "enums", + "exceptions", + "functions", + "integers", + "js-date", + "maybe", + "node-buffer", + "node-path", + "node-streams", + "nullable", + "partial", + "prelude", + "strings", + "unsafe-coerce" + ] + }, + "node-path": { + "type": "registry", + "version": "5.0.1", + "integrity": "sha256-ePOElFamHkffhwJcS0Ozq4A14rflnkasFU6X2B8/yXs=", + "dependencies": [ + "effect" + ] + }, + "node-process": { + "type": "registry", + "version": "11.2.0", + "integrity": "sha256-+2MQDYChjGbVbapCyJtuWYwD41jk+BntF/kcOTKBMVs=", + "dependencies": [ + "effect", + "foreign", + "foreign-object", + "maybe", + "node-event-emitter", + "node-streams", + "posix-types", + "prelude", + "unsafe-coerce" + ] + }, + "node-streams": { + "type": "registry", + "version": "9.0.1", + "integrity": "sha256-7RJ6RqjOlhW+QlDFQNUHlkCG/CuYTTLT8yary5jhhsU=", + "dependencies": [ + "aff", + "arrays", + "effect", + "either", + "exceptions", + "maybe", + "node-buffer", + "node-event-emitter", + "nullable", + "prelude", + "refs", + "st", + "tailrec", + "unsafe-coerce" + ] + }, + "nonempty": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-54ablJZUHGvvlTJzi3oXyPCuvY6zsrWJuH/dMJ/MFLs=", + "dependencies": [ + "control", + "foldable-traversable", + "maybe", + "prelude", + "tuples", + "unfoldable" + ] + }, + "now": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-xZ7x37ZMREfs6GCDw/h+FaKHV/3sPWmtqBZRGTxybQY=", + "dependencies": [ + "datetime", + "effect" + ] + }, + "nullable": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-yiGBVl3AD+Guy4kNWWeN+zl1gCiJK+oeIFtZtPCw4+o=", + "dependencies": [ + "effect", + "functions", + "maybe" + ] + }, + "numbers": { + "type": "registry", + "version": "9.0.1", + "integrity": "sha256-/9M6aeMDBdB4cwYDeJvLFprAHZ49EbtKQLIJsneXLIk=", + "dependencies": [ + "functions", + "maybe" + ] + }, + "open-memoize": { + "type": "registry", + "version": "6.2.0", + "integrity": "sha256-p1m7wF3aHQ80yUvqMs20OTMl496WS6YpKlmI2Nkg9j0=", + "dependencies": [ + "either", + "integers", + "lazy", + "lists", + "maybe", + "partial", + "prelude", + "strings", + "tuples" + ] + }, + "optparse": { + "type": "registry", + "version": "5.0.1", + "integrity": "sha256-cEzEkNW4q0gZlXl4z0zn+H2vs6l2UAp7NPHCsois73k=", + "dependencies": [ + "aff", + "arrays", + "bifunctors", + "console", + "control", + "effect", + "either", + "enums", + "exists", + "exitcodes", + "foldable-traversable", + "free", + "gen", + "integers", + "lazy", + "lists", + "maybe", + "newtype", + "node-buffer", + "node-process", + "node-streams", + "nonempty", + "numbers", + "open-memoize", + "partial", + "prelude", + "strings", + "tailrec", + "transformers", + "tuples" + ] + }, + "ordered-collections": { + "type": "registry", + "version": "3.2.0", + "integrity": "sha256-o9jqsj5rpJmMdoe/zyufWHFjYYFTTsJpgcuCnqCO6PM=", + "dependencies": [ + "arrays", + "foldable-traversable", + "gen", + "lists", + "maybe", + "partial", + "prelude", + "st", + "tailrec", + "tuples", + "unfoldable" + ] + }, + "orders": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-nBA0g3/ai0euH8q9pSbGqk53W2q6agm/dECZTHcoink=", + "dependencies": [ + "newtype", + "prelude" + ] + }, + "parallel": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-gUC9i4Txnx9K9RcMLsjujbwZz6BB1bnE2MLvw4GIw5o=", + "dependencies": [ + "control", + "effect", + "either", + "foldable-traversable", + "functors", + "maybe", + "newtype", + "prelude", + "profunctor", + "refs", + "transformers" + ] + }, + "partial": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-fwXerld6Xw1VkReh8yeQsdtLVrjfGiVuC5bA1Wyo/J4=", + "dependencies": [] + }, + "pipes": { + "type": "registry", + "version": "8.0.0", + "integrity": "sha256-kvfqGM4cPA/wCcBHbp5psouFw5dZGvku2462x7ZBwSY=", + "dependencies": [ + "aff", + "lists", + "mmorph", + "prelude", + "tailrec", + "transformers", + "tuples" + ] + }, + "posix-types": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-ZfFz8RR1lee/o/Prccyeut3Q+9tYd08mlR72sIh6GzA=", + "dependencies": [ + "maybe", + "prelude" + ] + }, + "prelude": { + "type": "registry", + "version": "6.0.2", + "integrity": "sha256-kiAPZxihtAel8uRiTNdccf4qylp/9J3jNkEHNAD0MsE=", + "dependencies": [] + }, + "profunctor": { + "type": "registry", + "version": "6.0.1", + "integrity": "sha256-E58hSYdJvF2Qjf9dnWLPlJKh2Z2fLfFLkQoYi16vsFk=", + "dependencies": [ + "control", + "distributive", + "either", + "exists", + "invariant", + "newtype", + "prelude", + "tuples" + ] + }, + "quickcheck": { + "type": "registry", + "version": "8.0.1", + "integrity": "sha256-ZvpccKQCvgslTXZCNmpYW4bUsFzhZd/kQUr2WmxFTGY=", + "dependencies": [ + "arrays", + "console", + "control", + "effect", + "either", + "enums", + "exceptions", + "foldable-traversable", + "gen", + "identity", + "integers", + "lazy", + "lcg", + "lists", + "maybe", + "newtype", + "nonempty", + "numbers", + "partial", + "prelude", + "record", + "st", + "strings", + "tailrec", + "transformers", + "tuples", + "unfoldable" + ] + }, + "random": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-CJ611a35MPCE7XQMp0rdC6MCn76znlhisiCRgboAG+Q=", + "dependencies": [ + "effect", + "integers" + ] + }, + "record": { + "type": "registry", + "version": "4.0.0", + "integrity": "sha256-Za5U85bTRJEfGK5Sk4hM41oXy84YQI0I8TL3WUn1Qzg=", + "dependencies": [ + "functions", + "prelude", + "unsafe-coerce" + ] + }, + "refs": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-Vgwne7jIbD3ZMoLNNETLT8Litw6lIYo3MfYNdtYWj9s=", + "dependencies": [ + "effect", + "prelude" + ] + }, + "safe-coerce": { + "type": "registry", + "version": "2.0.0", + "integrity": "sha256-a1ibQkiUcbODbLE/WAq7Ttbbh9ex+x33VCQ7GngKudU=", + "dependencies": [ + "unsafe-coerce" + ] + }, + "spec": { + "type": "registry", + "version": "8.1.1", + "integrity": "sha256-EM7UfQIaSgiw13LJ4ZASkfYmmRDKIlec3nYbGKFqGhk=", + "dependencies": [ + "aff", + "ansi", + "arrays", + "avar", + "bifunctors", + "control", + "datetime", + "effect", + "either", + "exceptions", + "foldable-traversable", + "fork", + "identity", + "integers", + "lists", + "maybe", + "newtype", + "now", + "ordered-collections", + "parallel", + "pipes", + "prelude", + "refs", + "strings", + "tailrec", + "transformers", + "tuples" + ] + }, + "spec-node": { + "type": "registry", + "version": "0.0.3", + "integrity": "sha256-Bjzg6l4uOfMN/FV0SKuT1Mm8eMP9sloLGVcY/0MeMnI=", + "dependencies": [ + "aff", + "argonaut-codecs", + "argonaut-core", + "arrays", + "control", + "datetime", + "effect", + "either", + "foldable-traversable", + "identity", + "integers", + "maybe", + "newtype", + "node-buffer", + "node-fs", + "node-process", + "now", + "numbers", + "optparse", + "ordered-collections", + "partial", + "prelude", + "spec", + "strings", + "tuples" + ] + }, + "spec-quickcheck": { + "type": "registry", + "version": "5.0.2", + "integrity": "sha256-Qn3ahQEgCskgQiUOWA5pfgUbbB5Jcv/EVuRN7D70K+s=", + "dependencies": [ + "aff", + "arrays", + "effect", + "foldable-traversable", + "lists", + "maybe", + "prelude", + "quickcheck", + "tuples" + ] + }, + "st": { + "type": "registry", + "version": "6.2.0", + "integrity": "sha256-z9X0WsOUlPwNx9GlCC+YccCyz8MejC8Wb0C4+9fiBRY=", + "dependencies": [ + "partial", + "prelude", + "tailrec", + "unsafe-coerce" + ] + }, + "strings": { + "type": "registry", + "version": "6.0.1", + "integrity": "sha256-WssD3DbX4OPzxSdjvRMX0yvc9+pS7n5gyPv5I2Trb7k=", + "dependencies": [ + "arrays", + "control", + "either", + "enums", + "foldable-traversable", + "gen", + "integers", + "maybe", + "newtype", + "nonempty", + "partial", + "prelude", + "tailrec", + "tuples", + "unfoldable", + "unsafe-coerce" + ] + }, + "tailrec": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-Xx19ECVDRrDWpz9D2GxQHHV89vd61dnXxQm0IcYQHGk=", + "dependencies": [ + "bifunctors", + "effect", + "either", + "identity", + "maybe", + "partial", + "prelude", + "refs" + ] + }, + "transformers": { + "type": "registry", + "version": "6.1.0", + "integrity": "sha256-3Bm+Z6tsC/paG888XkywDngJ2JMos+JfOhRlkVfb7gI=", + "dependencies": [ + "control", + "distributive", + "effect", + "either", + "exceptions", + "foldable-traversable", + "identity", + "lazy", + "maybe", + "newtype", + "prelude", + "st", + "tailrec", + "tuples", + "unfoldable" + ] + }, + "tuples": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-1rXgTomes9105BjgXqIw0FL6Fz1lqqUTLWOumhWec1M=", + "dependencies": [ + "control", + "invariant", + "prelude" + ] + }, + "type-equality": { + "type": "registry", + "version": "4.0.1", + "integrity": "sha256-Hs9D6Y71zFi/b+qu5NSbuadUQXe5iv5iWx0226vOHUw=", + "dependencies": [] + }, + "typelevel-prelude": { + "type": "registry", + "version": "7.0.0", + "integrity": "sha256-uFF2ph+vHcQpfPuPf2a3ukJDFmLhApmkpTMviHIWgJM=", + "dependencies": [ + "prelude", + "type-equality" + ] + }, + "unfoldable": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-JtikvJdktRap7vr/K4ITlxUX1QexpnqBq0G/InLr6eg=", + "dependencies": [ + "foldable-traversable", + "maybe", + "partial", + "prelude", + "tuples" + ] + }, + "unsafe-coerce": { + "type": "registry", + "version": "6.0.0", + "integrity": "sha256-IqIYW4Vkevn8sI+6aUwRGvd87tVL36BBeOr0cGAE7t0=", + "dependencies": [] + } + } +} diff --git a/quickcheck/spago.yaml b/quickcheck/spago.yaml new file mode 100644 index 0000000..56ccd19 --- /dev/null +++ b/quickcheck/spago.yaml @@ -0,0 +1,16 @@ +package: + name: lists-spec-tests + description: spago@next-enabled tests for lists using packages that depend on it + dependencies: + - prelude: ">=6.0.2 <7.0.0" + - quickcheck: ">=8.0.1 <9.0.0" + - spec: ">=8.1.1 <9.0.0" + - spec-quickcheck: ">=5.0.2 <6.0.0" + - spec-node: ">=0.0.3 <0.1.0" + test: + main: Test.Main + dependencies: + [] +workspace: + packageSet: + registry: 64.6.0 diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 2bb1033..7cdd159 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -25,18 +25,18 @@ type For f = type Value = Int -proxied :: forall m f. m Unit -> m (Proxy f) +proxied :: forall m f. Functor m => m Unit -> m (Proxy f) proxied = (_ $> Proxy) main :: Effect Unit main = runSpecAndExitProcess [consoleReporter] do - describe - functorLaws :: For List + describe "List instances" $ void do + functorLaws :: For List -functorLaws :: forall f. For f +functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do it "Identity: map identity = identity" do quickCheck \(l :: f Value) -> map identity l === l it "Composition: map (f <<< g) = map f <<< map g" do - quickCheck \(l :: f Value) -> map (f <<< g) l === map f (map g l) + quickCheck \(l :: f Value) (f :: Value -> Value) g -> map (f <<< g) l === map f (map g l) From d4e07c5fb624df1fcb50ffa03b2fa1a04552084e Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:16:53 -0400 Subject: [PATCH 21/34] YESSSSS WE ARE SO BACKKKKKKKK --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c3e2398..283ada1 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "clean": "rimraf output && rimraf .pulp-cache", "build": "pulp build -- --censor-lib --strict", "test": "pulp test", - "testsubdir": "cd quickcheck; spago test", + "testsubdir": "cd quickcheck; spago build && cp -r ../src .spago/p/lists-*.*.* && spago test", "bench:build": "purs compile 'bench/**/*.purs' 'src/**/*.purs' 'bower_components/*/src/**/*.purs'", "bench:run": "node --expose-gc -e 'require(\"./output/Bench.Main/index.js\").main()'", "bench": "npm run bench:build && npm run bench:run" From 964ac75de838472ff77ec46a980332a8e707840c Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:18:49 -0400 Subject: [PATCH 22/34] ...and actually let the CI run on this branch LMAO --- .github/workflows/ci.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97ad285..85365d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,6 @@ name: CI -on: - push: - branches: [main] - pull_request: - branches: [main] +on: [push] jobs: build: @@ -23,6 +19,7 @@ jobs: - name: Install dependencies run: | npm install -g bower + npm install -g spago@next npm install bower install --production From bd3cacc26e3dfa84d2272b0b38cc301d89b0544e Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:21:24 -0400 Subject: [PATCH 23/34] uhhhhhh --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85365d3..3c6b433 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,9 +12,9 @@ jobs: with: purescript: "unstable" - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v4 with: - node-version: "14.x" + node-version: "20.x" - name: Install dependencies run: | From 1869ac5815eec1ee17c99744f82cb34ded30bc08 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:23:05 -0400 Subject: [PATCH 24/34] phew...... --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c6b433..791f5ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: purescript-contrib/setup-purescript@main with: @@ -30,5 +30,7 @@ jobs: run: | bower install npm run test - npm run testsubdir + + - name: Run additional tests + run: npm run testsubdir From 25a3881a88f4b4d8ef58b06939f0b79ef0a818d8 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:34:04 -0400 Subject: [PATCH 25/34] Apply and Applicative :D --- quickcheck/test/Test/Main.purs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 7cdd159..4bf094a 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -32,6 +32,8 @@ main :: Effect Unit main = runSpecAndExitProcess [consoleReporter] do describe "List instances" $ void do functorLaws :: For List + applyLaws :: For List + applicativeLaws :: For List functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do @@ -40,3 +42,21 @@ functorLaws = proxied $ describe "Functor laws" do it "Composition: map (f <<< g) = map f <<< map g" do quickCheck \(l :: f Value) (f :: Value -> Value) g -> map (f <<< g) l === map f (map g l) +applyLaws :: forall f. Apply f => For f +applyLaws = proxied $ describe "Apply law" do + it "Associative composition: (<<<) <$> f <*> g <*> h = f <*> (g <*> h)" do + quickCheck \(f :: f (Value -> Value)) g (h :: f Value) -> + ((<<<) <$> f <*> g <*> h) === (f <*> (g <*> h)) + +applicativeLaws :: forall f. Applicative f => For f +applicativeLaws = proxied $ describe "Applicative laws" do + it "Identity: (pure identity) <*> v = v" do + quickCheck \(v :: f Value) -> (pure identity) <*> v === v + it "Composition: pure (<<<) <*> f <*> g <*> h = f <*> (g <*> h)" do + quickCheck \(f :: f (Value -> Value)) g (h :: f Value) -> + (pure (<<<) <*> f <*> g <*> h) === (f <*> (g <*> h)) + it "Homomorphism: (pure f) <*> (pure x) = pure (f x)" do + quickCheck \f (x :: Value) -> (pure f <*> pure x) === (pure (f x) :: f Value) + it "Interchange: u <*> (pure y) = (pure (_ $ y)) <*> u" do + quickCheck \(u :: f (Value -> Value)) y -> + (u <*> (pure y)) === ((pure (_ $ y)) <*> u) From 5d2c90e105d49ac026cdce5dcdc6360d9f6b3bb4 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:34:57 -0400 Subject: [PATCH 26/34] and there's the failure :DDDDDDDDD finallyyyyyyyy --- quickcheck/test/Test/Main.purs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 4bf094a..26e2cba 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -34,6 +34,10 @@ main = runSpecAndExitProcess [consoleReporter] do functorLaws :: For List applyLaws :: For List applicativeLaws :: For List + describe "NonEmptyList instances" $ void do + functorLaws :: For NonEmptyList + applyLaws :: For NonEmptyList + applicativeLaws :: For NonEmptyList functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do From dad7ea210dfa5f45965f8e62ecd905808fee3762 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:53:25 -0400 Subject: [PATCH 27/34] same problem. much easier to read. also more problems oops lmao --- src/Data/List/Types.purs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Data/List/Types.purs b/src/Data/List/Types.purs index a44df65..0b44e3d 100644 --- a/src/Data/List/Types.purs +++ b/src/Data/List/Types.purs @@ -209,7 +209,7 @@ derive newtype instance functorNonEmptyList :: Functor NonEmptyList instance applyNonEmptyList :: Apply NonEmptyList where apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) = - NonEmptyList (f a :| (fs <*> a : Nil) <> ((f : fs) <*> as)) + NonEmptyList (f a :| ((#) a <$> fs) <> (fs <*> (a : as))) instance applicativeNonEmptyList :: Applicative NonEmptyList where pure = NonEmptyList <<< NE.singleton From 98992f1707d77661c0620928e668111f8bfebd61 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 19:55:51 -0400 Subject: [PATCH 28/34] no problems! just also kinda always recomputes the first element which sucks --- src/Data/List/Types.purs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Data/List/Types.purs b/src/Data/List/Types.purs index 0b44e3d..eae5410 100644 --- a/src/Data/List/Types.purs +++ b/src/Data/List/Types.purs @@ -209,7 +209,9 @@ derive newtype instance functorNonEmptyList :: Functor NonEmptyList instance applyNonEmptyList :: Apply NonEmptyList where apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) = - NonEmptyList (f a :| ((#) a <$> fs) <> (fs <*> (a : as))) + NonEmptyList (f a :| behead ((f : fs) <*> (a : as))) + where behead (_:t) = t + behead Nil = Nil instance applicativeNonEmptyList :: Applicative NonEmptyList where pure = NonEmptyList <<< NE.singleton From 0da9144e1510c1e11cc9447018add71416f8bd11 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 20:06:14 -0400 Subject: [PATCH 29/34] monad laws while I'm at it --- quickcheck/test/Test/Main.purs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 26e2cba..04b32ab 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -34,10 +34,14 @@ main = runSpecAndExitProcess [consoleReporter] do functorLaws :: For List applyLaws :: For List applicativeLaws :: For List + bindLaws :: For List + monadLaws :: For List describe "NonEmptyList instances" $ void do functorLaws :: For NonEmptyList applyLaws :: For NonEmptyList applicativeLaws :: For NonEmptyList + bindLaws :: For NonEmptyList + monadLaws :: For NonEmptyList functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do @@ -64,3 +68,18 @@ applicativeLaws = proxied $ describe "Applicative laws" do it "Interchange: u <*> (pure y) = (pure (_ $ y)) <*> u" do quickCheck \(u :: f (Value -> Value)) y -> (u <*> (pure y)) === ((pure (_ $ y)) <*> u) + +bindLaws :: forall f. Bind f => For f +bindLaws = proxied $ describe "Bind laws" do + it "Associativity: (x >>= f) >>= g = x >>= (\\k -> f k >>= g)" do + quickCheck \(x :: f Value) f (g :: Value -> f Value) -> + ((x >>= f) >>= g) === (x >>= (\k -> f k >>= g)) + it "Apply Superclass: apply f x = f >>= \\f’ -> map f’ x" do + quickCheck \(f :: f (Value -> Value)) x -> apply f x === (f >>= \f' -> map f' x) + +monadLaws :: forall f. Monad f => For f +monadLaws = proxied $ describe "Monad laws" do + it "Left Identity: pure x >>= f = f x" do + quickCheck \(f :: Value -> f Value) x -> (pure x >>= f) === f x + it "Right Identity: x >>= pure = x" do + quickCheck \(x :: f Value) -> (x >>= pure) === x From c9443ecc495e07787eb28cb7ee1b8566ca4ca4c0 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 20:41:15 -0400 Subject: [PATCH 30/34] WAIT IT WAS LITERALLY JUST THAT AAAAAAAAAA --- src/Data/List/Types.purs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Data/List/Types.purs b/src/Data/List/Types.purs index eae5410..4daf9ce 100644 --- a/src/Data/List/Types.purs +++ b/src/Data/List/Types.purs @@ -209,9 +209,7 @@ derive newtype instance functorNonEmptyList :: Functor NonEmptyList instance applyNonEmptyList :: Apply NonEmptyList where apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) = - NonEmptyList (f a :| behead ((f : fs) <*> (a : as))) - where behead (_:t) = t - behead Nil = Nil + NonEmptyList (f a :| map f as <> (fs <*> (a : as))) instance applicativeNonEmptyList :: Applicative NonEmptyList where pure = NonEmptyList <<< NE.singleton From 1220624e314dbaafe58fb7fac506d18ae82a30e0 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Tue, 29 Apr 2025 21:00:26 -0400 Subject: [PATCH 31/34] ported fix to lazy but porting tests is a wee bit trickier --- quickcheck/test/Test/Main.purs | 17 +++++++++++++++++ src/Data/List/Lazy/Types.purs | 2 +- src/Data/List/Types.purs | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 04b32ab..6e3d65e 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -23,8 +23,13 @@ type For f = Coarbitrary (f Value) => Spec (Proxy f) +-- type For' f = For (OrphanArbitrary1 f) + type Value = Int +-- newtype OrphanArbitrary1 f a = OrphanArbitrary1 (f a) +-- derive newtype instance Eq (f a) => Eq (OrphanArbitrary1 f a) + proxied :: forall m f. Functor m => m Unit -> m (Proxy f) proxied = (_ $> Proxy) @@ -42,6 +47,18 @@ main = runSpecAndExitProcess [consoleReporter] do applicativeLaws :: For NonEmptyList bindLaws :: For NonEmptyList monadLaws :: For NonEmptyList + -- describe "Lazy.List instances" $ void do + -- functorLaws :: For' LZ.List + -- applyLaws :: For' LZ.List + -- applicativeLaws :: For' LZ.List + -- bindLaws :: For' LZ.List + -- monadLaws :: For' LZ.List + -- describe "Lazy.NonEmptyList instances" $ void do + -- functorLaws :: For' LZ.NonEmptyList + -- applyLaws :: For' LZ.NonEmptyList + -- applicativeLaws :: For' LZ.NonEmptyList + -- bindLaws :: For' LZ.NonEmptyList + -- monadLaws :: For' LZ.NonEmptyList functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do diff --git a/src/Data/List/Lazy/Types.purs b/src/Data/List/Lazy/Types.purs index 6a4163b..0fd720d 100644 --- a/src/Data/List/Lazy/Types.purs +++ b/src/Data/List/Lazy/Types.purs @@ -230,7 +230,7 @@ instance applyNonEmptyList :: Apply NonEmptyList where apply (NonEmptyList nefs) (NonEmptyList neas) = case force nefs, force neas of f :| fs, a :| as -> - NonEmptyList (defer \_ -> f a :| (fs <*> a : nil) <> ((f : fs) <*> as)) + NonEmptyList (defer \_ -> f a :| map f as <> apply fs (a : as)) instance applicativeNonEmptyList :: Applicative NonEmptyList where pure a = NonEmptyList (defer \_ -> NE.singleton a) diff --git a/src/Data/List/Types.purs b/src/Data/List/Types.purs index 4daf9ce..911e310 100644 --- a/src/Data/List/Types.purs +++ b/src/Data/List/Types.purs @@ -209,7 +209,7 @@ derive newtype instance functorNonEmptyList :: Functor NonEmptyList instance applyNonEmptyList :: Apply NonEmptyList where apply (NonEmptyList (f :| fs)) (NonEmptyList (a :| as)) = - NonEmptyList (f a :| map f as <> (fs <*> (a : as))) + NonEmptyList (f a :| map f as <> apply fs (a : as)) instance applicativeNonEmptyList :: Applicative NonEmptyList where pure = NonEmptyList <<< NE.singleton From 04542ba5a2d731f0f256e14e364d7186348b4b41 Mon Sep 17 00:00:00 2001 From: UnrelatedString Date: Fri, 2 May 2025 11:02:47 -0400 Subject: [PATCH 32/34] okay you know what I'm just not going to overdo it. better programmers than I are probably going to redo like most of this PR anyways lol --- quickcheck/test/Test/Main.purs | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/quickcheck/test/Test/Main.purs b/quickcheck/test/Test/Main.purs index 6e3d65e..c79215e 100644 --- a/quickcheck/test/Test/Main.purs +++ b/quickcheck/test/Test/Main.purs @@ -3,7 +3,7 @@ module Test.Main where import Prelude import Effect (Effect) -import Test.QuickCheck ((===), class Testable, class Arbitrary, class Coarbitrary) +import Test.QuickCheck ((===), class Arbitrary, class Coarbitrary) import Test.Spec (Spec, describe, it) import Test.Spec.QuickCheck (quickCheck) import Test.Spec.Runner.Node (runSpecAndExitProcess) @@ -11,8 +11,8 @@ import Test.Spec.Reporter.Console (consoleReporter) import Type.Proxy (Proxy(..)) import Data.List.Types (List, NonEmptyList) -import Data.List.ZipList (ZipList) -import Data.List.Lazy.Types as LZ +-- import Data.List.ZipList (ZipList) +-- import Data.List.Lazy.Types as LZ -- Proxy a is Discard ;) type For f = @@ -23,13 +23,8 @@ type For f = Coarbitrary (f Value) => Spec (Proxy f) --- type For' f = For (OrphanArbitrary1 f) - type Value = Int --- newtype OrphanArbitrary1 f a = OrphanArbitrary1 (f a) --- derive newtype instance Eq (f a) => Eq (OrphanArbitrary1 f a) - proxied :: forall m f. Functor m => m Unit -> m (Proxy f) proxied = (_ $> Proxy) @@ -47,18 +42,6 @@ main = runSpecAndExitProcess [consoleReporter] do applicativeLaws :: For NonEmptyList bindLaws :: For NonEmptyList monadLaws :: For NonEmptyList - -- describe "Lazy.List instances" $ void do - -- functorLaws :: For' LZ.List - -- applyLaws :: For' LZ.List - -- applicativeLaws :: For' LZ.List - -- bindLaws :: For' LZ.List - -- monadLaws :: For' LZ.List - -- describe "Lazy.NonEmptyList instances" $ void do - -- functorLaws :: For' LZ.NonEmptyList - -- applyLaws :: For' LZ.NonEmptyList - -- applicativeLaws :: For' LZ.NonEmptyList - -- bindLaws :: For' LZ.NonEmptyList - -- monadLaws :: For' LZ.NonEmptyList functorLaws :: forall f. Functor f => For f functorLaws = proxied $ describe "Functor laws" do From 345e1db9eba4fb5fbb5397a376b9618d9aab9a3e Mon Sep 17 00:00:00 2001 From: June <33167175+UnrelatedString@users.noreply.github.com> Date: Fri, 2 May 2025 11:07:41 -0400 Subject: [PATCH 33/34] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cedff42..f14a023 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,16 @@ Notable changes to this project are documented in this file. The format is based Breaking changes: +- Change `Apply NonEmptyList` instance to obey `Apply` and `Applicative` laws + New features: - Change `NonEmpty.toUnfoldable` to produce any `Unfoldable1` (#220 by @UnrelatedString) Bugfixes: +- Change `Apply NonEmptyList` instance to obey `Apply` and `Applicative` laws + Other improvements: ## [v7.0.0](https://github.com/purescript/purescript-lists/releases/tag/v7.0.0) - 2022-04-27 From 46e1604a8990b48823c326279cf1bdfe275f73e3 Mon Sep 17 00:00:00 2001 From: June <33167175+UnrelatedString@users.noreply.github.com> Date: Fri, 2 May 2025 11:14:52 -0400 Subject: [PATCH 34/34] ...this test might help --- test/Test/Data/List/NonEmpty.purs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/Test/Data/List/NonEmpty.purs b/test/Test/Data/List/NonEmpty.purs index db087e5..57f477c 100644 --- a/test/Test/Data/List/NonEmpty.purs +++ b/test/Test/Data/List/NonEmpty.purs @@ -284,6 +284,9 @@ testNonEmptyList = do log "toUnfoldable should agree with Unfoldable1 NEL" assert $ nel 1 [2, 3, 4, 5] == NEL.toUnfoldable (nel 1 [2, 3, 4, 5]) + log "apply should agree with Apply List" + assert $ l (Tuple <$> nel 1 [2, 3, 4] <*> nel 'a' ['b', 'c', 'd']) == (Tuple <$> l [1, 2, 3, 4] <*> l ['a', 'b', 'c', 'd']) + step1 :: Int -> Tuple Int (Maybe Int) step1 n = Tuple n (if n >= 5 then Nothing else Just (n + 1))