(for PR #29582)
2026-03-25 13:14.41: New job: test preface.1.1.0 with ocaml-compiler.5.4.0, using opam dev
from https://github.com/ocaml/opam-repository.git#refs/pull/29582/head (fa5fb3a6a806e832e4c7791145889a6bbe8b64ef)
on debian-13-ocaml-5.4/amd64
To reproduce locally:
cd $(mktemp -d)
git clone --recursive "https://github.com/ocaml/opam-repository.git" && cd "opam-repository" && git fetch origin "refs/pull/29582/head" && git reset --hard fa5fb3a6
git fetch origin master
git merge --no-edit 2f93e9d4614d6376ed929fc2cee7c59cb9d5833b
cat > ../Dockerfile <<'END-OF-DOCKERFILE'
FROM ocaml/opam:debian-13-ocaml-5.4@sha256:bd342cbd7766c453282fdafbc2e565ae3361320ec344722cf4372b782e4a97f6
USER 1000:1000
WORKDIR /home/opam
RUN sudo ln -f /usr/bin/opam-dev /usr/bin/opam
RUN opam init --reinit -ni
RUN opam option solver=builtin-0install && opam config report
ENV OPAMDOWNLOADJOBS="1"
ENV OPAMERRLOGLEN="0"
ENV OPAMPRECISETRACKING="1"
ENV CI="true"
ENV OPAM_REPO_CI="true"
RUN rm -rf opam-repository/
COPY --chown=1000:1000 . opam-repository/
RUN opam repository set-url --strict default opam-repository/
RUN opam update --depexts || true
RUN opam pin add -k version -yn ocaml-compiler.5.4.0 5.4.0
RUN opam reinstall --update-invariant ocaml-compiler.5.4.0; \
res=$?; \
test "$res" != 31 && exit "$res"; \
export OPAMCLI=2.0; \
build_dir=$(opam var prefix)/.opam-switch/build; \
failed=$(ls "$build_dir"); \
partial_fails=""; \
for pkg in $failed; do \
if opam show -f x-ci-accept-failures: "$pkg" | grep -qF "\"debian-13\""; then \
echo "A package failed and has been disabled for CI using the 'x-ci-accept-failures' field."; \
fi; \
test "$pkg" != 'ocaml-compiler.5.4.0' && partial_fails="$partial_fails $pkg"; \
done; \
test "${partial_fails}" != "" && echo "opam-repo-ci detected dependencies failing: ${partial_fails}"; \
exit 1
RUN opam reinstall preface.1.1.0; \
res=$?; \
test "$res" != 31 && exit "$res"; \
export OPAMCLI=2.0; \
build_dir=$(opam var prefix)/.opam-switch/build; \
failed=$(ls "$build_dir"); \
partial_fails=""; \
for pkg in $failed; do \
if opam show -f x-ci-accept-failures: "$pkg" | grep -qF "\"debian-13\""; then \
echo "A package failed and has been disabled for CI using the 'x-ci-accept-failures' field."; \
fi; \
test "$pkg" != 'preface.1.1.0' && partial_fails="$partial_fails $pkg"; \
done; \
test "${partial_fails}" != "" && echo "opam-repo-ci detected dependencies failing: ${partial_fails}"; \
exit 1
RUN (opam reinstall --with-test preface.1.1.0) || true
RUN opam reinstall --with-test --verbose preface.1.1.0; \
res=$?; \
test "$res" != 31 && exit "$res"; \
export OPAMCLI=2.0; \
build_dir=$(opam var prefix)/.opam-switch/build; \
failed=$(ls "$build_dir"); \
partial_fails=""; \
for pkg in $failed; do \
if opam show -f x-ci-accept-failures: "$pkg" | grep -qF "\"debian-13\""; then \
echo "A package failed and has been disabled for CI using the 'x-ci-accept-failures' field."; \
fi; \
test "$pkg" != 'preface.1.1.0' && partial_fails="$partial_fails $pkg"; \
done; \
test "${partial_fails}" != "" && echo "opam-repo-ci detected dependencies failing: ${partial_fails}"; \
exit 1
END-OF-DOCKERFILE
docker build -f ../Dockerfile .
2026-03-25 13:14.41: Using cache hint "ocaml/opam:debian-13-ocaml-5.4@sha256:bd342cbd7766c453282fdafbc2e565ae3361320ec344722cf4372b782e4a97f6-ocaml-compiler.5.4.0-preface.1.1.0-fa5fb3a6a806e832e4c7791145889a6bbe8b64ef"
2026-03-25 13:14.41: Using OBuilder spec:
((from ocaml/opam:debian-13-ocaml-5.4@sha256:bd342cbd7766c453282fdafbc2e565ae3361320ec344722cf4372b782e4a97f6)
(user (uid 1000) (gid 1000))
(workdir /home/opam)
(run (shell "sudo ln -f /usr/bin/opam-dev /usr/bin/opam"))
(run (network host)
(shell "opam init --reinit --config .opamrc-sandbox -ni"))
(run (shell "opam option solver=builtin-0install && opam config report"))
(env OPAMDOWNLOADJOBS 1)
(env OPAMERRLOGLEN 0)
(env OPAMPRECISETRACKING 1)
(env CI true)
(env OPAM_REPO_CI true)
(run (shell "rm -rf opam-repository/"))
(copy (src .) (dst opam-repository/))
(run (shell "opam repository set-url --strict default opam-repository/"))
(run (network host)
(shell "opam update --depexts || true"))
(run (shell "opam pin add -k version -yn ocaml-compiler.5.4.0 5.4.0"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam reinstall --update-invariant ocaml-compiler.5.4.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'ocaml-compiler.5.4.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
(run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam reinstall preface.1.1.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'preface.1.1.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
(run (network host)
(shell "(opam reinstall --with-test preface.1.1.0) || true"))
(run (shell "opam reinstall --with-test --verbose preface.1.1.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'preface.1.1.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
)
2026-03-25 13:14.41: Waiting for resource in pool OCluster
2026-03-25 18:28.59: Waiting for worker…
2026-03-25 18:31.08: Got resource from pool OCluster
Building on clete.caelum.ci.dev
All commits already cached
Updating files: 71% (13297/18520)
Updating files: 72% (13335/18520)
Updating files: 73% (13520/18520)
Updating files: 74% (13705/18520)
Updating files: 75% (13890/18520)
Updating files: 76% (14076/18520)
Updating files: 77% (14261/18520)
Updating files: 78% (14446/18520)
Updating files: 79% (14631/18520)
Updating files: 80% (14816/18520)
Updating files: 81% (15002/18520)
Updating files: 82% (15187/18520)
Updating files: 83% (15372/18520)
Updating files: 84% (15557/18520)
Updating files: 85% (15742/18520)
Updating files: 86% (15928/18520)
Updating files: 87% (16113/18520)
Updating files: 88% (16298/18520)
Updating files: 89% (16483/18520)
Updating files: 90% (16668/18520)
Updating files: 91% (16854/18520)
Updating files: 92% (17039/18520)
Updating files: 93% (17224/18520)
Updating files: 94% (17409/18520)
Updating files: 95% (17594/18520)
Updating files: 96% (17780/18520)
Updating files: 97% (17965/18520)
Updating files: 98% (18150/18520)
Updating files: 99% (18335/18520)
Updating files: 100% (18520/18520)
Updating files: 100% (18520/18520), done.
HEAD is now at 2f93e9d461 Merge pull request #29592 from dinosaure/release-miou-v0.5.5
Merge made by the 'ort' strategy.
packages/ocaml-compiler/ocaml-compiler.5.3.0/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.3/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.4.0/opam | 5 ++++-
.../ocaml-compiler/ocaml-compiler.5.4.0~alpha1/opam | 5 ++++-
.../ocaml-compiler/ocaml-compiler.5.4.0~beta1/opam | 5 ++++-
.../ocaml-compiler/ocaml-compiler.5.4.0~beta2/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.4.0~rc1/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.4.1/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.4/opam | 5 ++++-
.../ocaml-compiler/ocaml-compiler.5.5.0~alpha1/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.5/opam | 5 ++++-
packages/ocaml-compiler/ocaml-compiler.5.6/opam | 5 ++++-
packages/ocaml-option-llvm/ocaml-option-llvm.1/opam | 18 ++++++++++++++++++
.../ocaml-options-vanilla/ocaml-options-vanilla.1/opam | 1 +
packages/ocaml-variants/ocaml-variants.5.2.0+msvc/opam | 2 ++
15 files changed, 69 insertions(+), 12 deletions(-)
create mode 100644 packages/ocaml-option-llvm/ocaml-option-llvm.1/opam
(from ocaml/opam:debian-13-ocaml-5.4@sha256:bd342cbd7766c453282fdafbc2e565ae3361320ec344722cf4372b782e4a97f6)
2026-03-25 18:31.17 ---> using "41eea30e3f639c18d8cf57c309ec76919ec7b2398036f7e41744cbce59a133d3" from cache
/: (user (uid 1000) (gid 1000))
/: (workdir /home/opam)
/home/opam: (run (shell "sudo ln -f /usr/bin/opam-dev /usr/bin/opam"))
2026-03-25 18:31.17 ---> using "4ad7f430d684c40cedc651267e0edf890c044fe4e624255de377c471b4526bac" from cache
/home/opam: (run (network host)
(shell "opam init --reinit --config .opamrc-sandbox -ni"))
Configuring from /home/opam/.opamrc-sandbox, then /home/opam/.opamrc, and finally from built-in defaults.
Checking for available remotes: rsync and local, git.
- you won't be able to use mercurial repositories unless you install the hg command on your system.
- you won't be able to use darcs repositories unless you install the darcs command on your system.
This version of opam requires an update to the layout of /home/opam/.opam from version 2.0 to version 2.2, which can't be reverted.
You may want to back it up before going further.
Continue? [Y/n] y
Format upgrade done.
<><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><>
[default] Initialised
2026-03-25 18:31.17 ---> using "71fa58e52457bf6a7eac317c6a6ef1e2bdf53e533a1e4fd04b90c9349347e038" from cache
/home/opam: (run (shell "opam option solver=builtin-0install && opam config report"))
Set to 'builtin-0install' the field solver in global configuration
# opam config report
# opam-version 2.5.0
# self-upgrade no
# system arch=x86_64 os=linux os-distribution=debian os-version=13
# solver builtin-0install
# install-criteria -changed,-count[avoid-version,solution]
# upgrade-criteria -count[avoid-version,solution]
# jobs 71
# repositories 1 (version-controlled)
# pinned 1 (version)
# current-switch 5.4
# invariant ["ocaml-base-compiler" {= "5.4.0"}]
# compiler-packages ocaml-base-compiler.5.4.0, ocaml-compiler.5.4.0, ocaml-options-vanilla.1
# ocaml:native true
# ocaml:native-tools true
# ocaml:native-dynlink true
# ocaml:stubsdir /home/opam/.opam/5.4/lib/ocaml/stublibs:/home/opam/.opam/5.4/lib/ocaml
# ocaml:preinstalled false
# ocaml:compiler 5.4.0
2026-03-25 18:31.17 ---> using "ed86081cb38ca125a920162bfe6a4bb7b1c27c6973c917551687c83cf44dbfdf" from cache
/home/opam: (env OPAMDOWNLOADJOBS 1)
/home/opam: (env OPAMERRLOGLEN 0)
/home/opam: (env OPAMPRECISETRACKING 1)
/home/opam: (env CI true)
/home/opam: (env OPAM_REPO_CI true)
/home/opam: (run (shell "rm -rf opam-repository/"))
2026-03-25 18:31.17 ---> using "04a48515eea40c32b96da0c71328b4bba0edb66eed83d4f78554b39097cf1f25" from cache
/home/opam: (copy (src .) (dst opam-repository/))
2026-03-25 18:31.19 ---> using "034191995d824300f355cbba1072d6e5fe6d815701f24eb84d82c75009d73829" from cache
/home/opam: (run (shell "opam repository set-url --strict default opam-repository/"))
[default] Initialised
2026-03-25 18:31.19 ---> using "8232259ea36ea8848dc29ae49703acf145fd27b40f3ebd8fb785db7f8da1b9d4" from cache
/home/opam: (run (network host)
(shell "opam update --depexts || true"))
+ /usr/bin/sudo "apt-get" "update"
- Get:1 http://deb.debian.org/debian trixie InRelease [140 kB]
- Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB]
- Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB]
- Get:4 http://deb.debian.org/debian trixie/main amd64 Packages [9671 kB]
- Get:5 http://deb.debian.org/debian-security trixie-security/main amd64 Packages [114 kB]
- Fetched 10.0 MB in 1s (6734 kB/s)
- Reading package lists...
-
2026-03-25 18:31.19 ---> using "a75782a571df4fc8f8933e94c681af881015ee87cdd4c652f8ae9af1d8cfad37" from cache
/home/opam: (run (shell "opam pin add -k version -yn ocaml-compiler.5.4.0 5.4.0"))
ocaml-compiler is now pinned to version 5.4.0
2026-03-25 18:31.19 ---> using "60e129f7398974b5fa5afc8f56ec09bd24a9182f5e9834464bfc959db1aa6b14" from cache
/home/opam: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam reinstall --update-invariant ocaml-compiler.5.4.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'ocaml-compiler.5.4.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
The following actions will be performed:
=== recompile 8 packages
- recompile base-domains base [uses ocaml]
- recompile base-effects base [uses ocaml]
- recompile base-nnp base [uses base-domains]
- recompile ocaml 5.4.0 [uses ocaml-base-compiler]
- recompile ocaml-base-compiler 5.4.0 (pinned) [uses ocaml-compiler]
- recompile ocaml-compiler 5.4.0 (pinned)
- recompile ocaml-config 3 [uses ocaml-base-compiler]
- recompile opam-depext 1.2.3 [uses ocaml]
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved ocaml-compiler.5.4.0 (cached)
-> retrieved ocaml-config.3 (cached)
-> retrieved opam-depext.1.2.3 (cached)
-> removed base-effects.base
-> removed base-nnp.base
-> removed base-domains.base
-> removed opam-depext.1.2.3
-> removed ocaml.5.4.0
-> removed ocaml-config.3
-> removed ocaml-base-compiler.5.4.0
-> removed ocaml-compiler.5.4.0
-> installed ocaml-compiler.5.4.0
-> installed ocaml-base-compiler.5.4.0
-> installed ocaml-config.3
-> installed ocaml.5.4.0
-> installed base-domains.base
-> installed base-effects.base
-> installed base-nnp.base
-> installed opam-depext.1.2.3
Done.
<><> opam-depext.1.2.3 installed successfully <><><><><><><><><><><><><><><><><>
=> opam-depext is unnecessary when used with opam >= 2.1. Please use opam install directly instead
# To update the current shell environment, run: eval $(opam env)
2026-03-25 18:31.19 ---> using "efbc92fc0c607605c8bb33f9e4c8fe340a48c67e14d2f61592db8a4edc5c0b15" from cache
/home/opam: (run (cache (opam-archives (target /home/opam/.opam/download-cache)))
(network host)
(shell "opam reinstall preface.1.1.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'preface.1.1.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
preface.1.1.0 is not installed. Install it? [Y/n] y
The following actions will be performed:
=== install 3 packages
- install dune 3.22.0 [required by preface]
- install preface 1.1.0
- install qcheck-core 0.91 [required by preface]
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved dune.3.22.0 (cached)
-> retrieved preface.1.1.0 (https://opam.ocaml.org/cache)
-> retrieved qcheck-core.0.91 (cached)
-> installed dune.3.22.0
-> installed qcheck-core.0.91
-> installed preface.1.1.0
Done.
# To update the current shell environment, run: eval $(opam env)
2026-03-25 18:33.26 ---> saved as "f17f8b256d9544ffa9cb59cddc6bafcea1519e8a88edf31239fa10af4765c26a"
/home/opam: (run (network host)
(shell "(opam reinstall --with-test preface.1.1.0) || true"))
The following actions will be performed:
=== recompile 1 package
- recompile preface 1.1.0
=== install 19 packages
- install alcotest 1.9.1 [required by preface]
- install astring 0.8.5 [required by alcotest, mdx]
- install camlp-streams 5.0.1 [required by mdx]
- install cmdliner 2.1.0 [required by alcotest, mdx]
- install cppo 1.8.0 [required by mdx]
- install csexp 1.5.2 [required by mdx]
- install fmt 0.11.0 [required by alcotest, mdx]
- install logs 0.10.0 [required by mdx]
- install mdx 2.5.1 [required by preface]
- install ocaml-syntax-shims 1.0.0 [required by alcotest]
- install ocaml-version 4.0.4 [required by mdx]
- install ocamlbuild 0.16.1 [required by uutf, astring, fmt, logs]
- install ocamlfind 1.9.8 [required by mdx]
- install qcheck-alcotest 0.91 [required by preface]
- install re 1.14.0 [required by alcotest, mdx]
- install result 1.5 [required by mdx]
- install stdlib-shims 0.3.0 [required by alcotest]
- install topkg 1.1.1 [required by uutf, astring, fmt, logs]
- install uutf 1.0.4 [required by alcotest]
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-> retrieved alcotest.1.9.1 (https://opam.ocaml.org/cache)
-> retrieved astring.0.8.5 (https://opam.ocaml.org/cache)
-> retrieved camlp-streams.5.0.1 (https://opam.ocaml.org/cache)
-> retrieved cmdliner.2.1.0 (https://opam.ocaml.org/cache)
-> retrieved cppo.1.8.0 (https://opam.ocaml.org/cache)
-> retrieved csexp.1.5.2 (https://opam.ocaml.org/cache)
-> retrieved fmt.0.11.0 (https://opam.ocaml.org/cache)
-> retrieved logs.0.10.0 (https://opam.ocaml.org/cache)
-> installed camlp-streams.5.0.1
-> retrieved mdx.2.5.1 (https://opam.ocaml.org/cache)
-> installed csexp.1.5.2
-> retrieved ocaml-syntax-shims.1.0.0 (https://opam.ocaml.org/cache)
-> retrieved ocaml-version.4.0.4 (https://opam.ocaml.org/cache)
-> retrieved ocamlbuild.0.16.1 (https://opam.ocaml.org/cache)
-> retrieved ocamlfind.1.9.8 (https://opam.ocaml.org/cache)
-> installed ocaml-version.4.0.4
-> retrieved preface.1.1.0 (https://opam.ocaml.org/cache)
-> retrieved qcheck-alcotest.0.91 (https://opam.ocaml.org/cache)
-> retrieved re.1.14.0 (https://opam.ocaml.org/cache)
-> retrieved result.1.5 (https://opam.ocaml.org/cache)
-> installed cppo.1.8.0
-> retrieved stdlib-shims.0.3.0 (https://opam.ocaml.org/cache)
-> retrieved topkg.1.1.1 (https://opam.ocaml.org/cache)
-> installed result.1.5
-> retrieved uutf.1.0.4 (https://opam.ocaml.org/cache)
-> installed ocaml-syntax-shims.1.0.0
-> installed stdlib-shims.0.3.0
-> installed re.1.14.0
-> installed ocamlfind.1.9.8
-> installed cmdliner.2.1.0
-> removed preface.1.1.0
-> installed ocamlbuild.0.16.1
-> installed topkg.1.1.1
-> installed fmt.0.11.0
-> installed uutf.1.0.4
-> installed astring.0.8.5
-> installed logs.0.10.0
-> installed alcotest.1.9.1
-> installed qcheck-alcotest.0.91
-> installed mdx.2.5.1
-> installed preface.1.1.0
Done.
# To update the current shell environment, run: eval $(opam env)
2026-03-25 18:35.31 ---> saved as "dd439821ab4bbd892210dc1444d4e5593aff051a9213c63b4dbccde064f83098"
/home/opam: (run (shell "opam reinstall --with-test --verbose preface.1.1.0;\
\n res=$?;\
\n test \"$res\" != 31 && exit \"$res\";\
\n export OPAMCLI=2.0;\
\n build_dir=$(opam var prefix)/.opam-switch/build;\
\n failed=$(ls \"$build_dir\");\
\n partial_fails=\"\";\
\n for pkg in $failed; do\
\n if opam show -f x-ci-accept-failures: \"$pkg\" | grep -qF \"\\\"debian-13\\\"\"; then\
\n echo \"A package failed and has been disabled for CI using the 'x-ci-accept-failures' field.\";\
\n fi;\
\n test \"$pkg\" != 'preface.1.1.0' && partial_fails=\"$partial_fails $pkg\";\
\n done;\
\n test \"${partial_fails}\" != \"\" && echo \"opam-repo-ci detected dependencies failing: ${partial_fails}\";\
\n exit 1"))
The following actions will be performed:
=== recompile 1 package
- recompile preface 1.1.0
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
Processing 1/4: [preface.1.1.0: extract]
-> retrieved preface.1.1.0 (cached)
Processing 2/4: [preface: dune build]
+ /home/opam/.opam/opam-init/hooks/sandbox.sh "build" "dune" "build" "-p" "preface" "-j" "71" (CWD=/home/opam/.opam/5.4/.opam-switch/build/preface.1.1.0)
- (cd _build/default && /home/opam/.opam/5.4/bin/ocamlc.opt -w -40 -g -bin-annot -bin-annot-occurrences -I lib/preface_qcheck/.preface_qcheck.objs/byte -I /home/opam/.opam/5.4/lib/ocaml/unix -I /home/opam/.opam/5.4/lib/qcheck-core -I lib/preface_core/.preface_core.objs/byte -I lib/preface_laws/.preface_laws.objs/byte -I lib/preface_make/.preface_make.objs/byte -I lib/preface_specs/.preface_specs.objs/byte -cmi-file lib/preface_qcheck/.preface_qcheck.objs/byte/preface_qcheck__Util.cmi -no-alias-deps -open Preface_qcheck__ -o lib/preface_qcheck/.preface_qcheck.objs/byte/preface_qcheck__Util.cmo -c -impl lib/preface_qcheck/util.ml)
- File "lib/preface_qcheck/util.ml", line 11, characters 2-11:
- 11 | frequency [ (5, left >|= Either.left); (5, right >|= Either.right) ]
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
-
- File "lib/preface_qcheck/util.ml", line 16, characters 2-11:
- 16 | frequency
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
-
- File "lib/preface_qcheck/util.ml", line 22, characters 2-11:
- 22 | frequency [ (7, ok >|= Result.ok); (3, error >|= Result.error) ]
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
- (cd _build/default && /home/opam/.opam/5.4/bin/ocamlopt.opt -w -40 -g -I lib/preface_qcheck/.preface_qcheck.objs/byte -I lib/preface_qcheck/.preface_qcheck.objs/native -I /home/opam/.opam/5.4/lib/ocaml/unix -I /home/opam/.opam/5.4/lib/qcheck-core -I lib/preface_core/.preface_core.objs/byte -I lib/preface_core/.preface_core.objs/native -I lib/preface_laws/.preface_laws.objs/byte -I lib/preface_laws/.preface_laws.objs/native -I lib/preface_make/.preface_make.objs/byte -I lib/preface_make/.preface_make.objs/native -I lib/preface_specs/.preface_specs.objs/byte -I lib/preface_specs/.preface_specs.objs/native -cmi-file lib/preface_qcheck/.preface_qcheck.objs/byte/preface_qcheck__Util.cmi -no-alias-deps -open Preface_qcheck__ -o lib/preface_qcheck/.preface_qcheck.objs/native/preface_qcheck__Util.cmx -c -impl lib/preface_qcheck/util.ml)
- File "lib/preface_qcheck/util.ml", line 11, characters 2-11:
- 11 | frequency [ (5, left >|= Either.left); (5, right >|= Either.right) ]
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
-
- File "lib/preface_qcheck/util.ml", line 16, characters 2-11:
- 16 | frequency
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
-
- File "lib/preface_qcheck/util.ml", line 22, characters 2-11:
- 22 | frequency [ (7, ok >|= Result.ok); (3, error >|= Result.error) ]
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
Processing 2/4: [preface: dune runtest]
+ /home/opam/.opam/opam-init/hooks/sandbox.sh "build" "dune" "runtest" "-p" "preface" (CWD=/home/opam/.opam/5.4/.opam-switch/build/preface.1.1.0)
- (cd _build/default && /home/opam/.opam/5.4/bin/ocamlopt.opt -w -40 -g -I test/preface_laws_test/.preface_laws_test.eobjs/byte -I test/preface_laws_test/.preface_laws_test.eobjs/native -I /home/opam/.opam/5.4/lib/alcotest -I /home/opam/.opam/5.4/lib/alcotest/engine -I /home/opam/.opam/5.4/lib/alcotest/stdlib_ext -I /home/opam/.opam/5.4/lib/astring -I /home/opam/.opam/5.4/lib/cmdliner -I /home/opam/.opam/5.4/lib/fmt -I /home/opam/.opam/5.4/lib/fmt/cli -I /home/opam/.opam/5.4/lib/fmt/tty -I /home/opam/.opam/5.4/lib/ocaml/unix -I /home/opam/.opam/5.4/lib/qcheck-alcotest -I /home/opam/.opam/5.4/lib/qcheck-core -I /home/opam/.opam/5.4/lib/qcheck-core/runner -I /home/opam/.opam/5.4/lib/re -I /home/opam/.opam/5.4/lib/stdlib-shims -I /home/opam/.opam/5.4/lib/uutf -I lib/preface/.Preface.objs/byte -I lib/preface/.Preface.objs/native -I lib/preface_core/.preface_core.objs/byte -I lib/preface_core/.preface_core.objs/native -I lib/preface_laws/.preface_laws.objs/byte -I lib/preface_laws/.preface_laws.objs/native -I lib/preface_make/.preface_make.objs/byte -I lib/preface_make/.preface_make.objs/native -I lib/preface_qcheck/.preface_qcheck.objs/byte -I lib/preface_qcheck/.preface_qcheck.objs/native -I lib/preface_specs/.preface_specs.objs/byte -I lib/preface_specs/.preface_specs.objs/native -I lib/preface_stdlib/.preface_stdlib.objs/byte -I lib/preface_stdlib/.preface_stdlib.objs/native -cmi-file test/preface_laws_test/.preface_laws_test.eobjs/byte/dune__exe__Req.cmi -no-alias-deps -open Dune__exe -o test/preface_laws_test/.preface_laws_test.eobjs/native/dune__exe__Req.cmx -c -impl test/preface_laws_test/req.ml)
- File "test/preface_laws_test/req.ml", line 276, characters 4-13:
- 276 | frequency
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
- (cd _build/default/test/preface_core_test && ./preface_core_test.exe)
- Testing `Preface_core'.
- This run has ID `0PTPW14Q'.
-
- [OK] Nonempty_list 0 Create.
- [OK] Nonempty_list 1 From_list with element in list.
- [OK] Nonempty_list 2 From_list with one element in list.
- [OK] Nonempty_list 3 From_list without element in list.
- [OK] Nonempty_list 4 Create list from non empty list wi...
- [OK] Nonempty_list 5 Create list from non empty list.
- [OK] Nonempty_list 6 Should extract head.
- [OK] Nonempty_list 7 Should extract empty tail.
- [OK] Nonempty_list 8 Should extract tail.
- [OK] Nonempty_list 9 Should have length 1.
- [OK] Nonempty_list 10 Should have length 4.
- [OK] Nonempty_list 11 Should cons.
- [OK] Nonempty_list 12 Should rev singleton.
- [OK] Nonempty_list 13 Should rev.
- [OK] Nonempty_list 14 Should iteri 1.
- [OK] Nonempty_list 15 Should iteri 2.
- [OK] Nonempty_list 16 Should iter 1.
- [OK] Nonempty_list 17 Should iter 2.
- [OK] Nonempty_list 18 Should mapi 1.
- [OK] Nonempty_list 19 Should mapi 2.
- [OK] Nonempty_list 20 Should map 1.
- [OK] Nonempty_list 21 Should map 2.
- [OK] Nonempty_list 22 Should fold left 1.
- [OK] Nonempty_list 23 Should fold left 2.
- [OK] Nonempty_list 24 Should fold right 1.
- [OK] Nonempty_list 25 Should fold right 2.
- [OK] Nonempty_list 26 Should append.
- [OK] Nonempty_list 27 Should flatten 1.
- [OK] Nonempty_list 28 Should flatten 2.
- [OK] Nonempty_list 29 Should rev_append.
- [OK] Fun 0 Right to left composition.
- [OK] Fun 1 Right to left infix composition.
- [OK] Fun 2 Left to right composition.
- [OK] Fun 3 Left to right infix composition.
-
- Full test results in `~/.opam/5.4/.opam-switch/build/preface.1.1.0/_build/default/test/preface_core_test/_build/_tests/Preface_core'.
- Test Successful in 0.020s. 34 tests run.
- (cd _build/default && /home/opam/.opam/5.4/bin/ocamlopt.opt -w -40 -g -I test/preface_laws_test/.preface_laws_test.eobjs/byte -I test/preface_laws_test/.preface_laws_test.eobjs/native -I /home/opam/.opam/5.4/lib/alcotest -I /home/opam/.opam/5.4/lib/alcotest/engine -I /home/opam/.opam/5.4/lib/alcotest/stdlib_ext -I /home/opam/.opam/5.4/lib/astring -I /home/opam/.opam/5.4/lib/cmdliner -I /home/opam/.opam/5.4/lib/fmt -I /home/opam/.opam/5.4/lib/fmt/cli -I /home/opam/.opam/5.4/lib/fmt/tty -I /home/opam/.opam/5.4/lib/ocaml/unix -I /home/opam/.opam/5.4/lib/qcheck-alcotest -I /home/opam/.opam/5.4/lib/qcheck-core -I /home/opam/.opam/5.4/lib/qcheck-core/runner -I /home/opam/.opam/5.4/lib/re -I /home/opam/.opam/5.4/lib/stdlib-shims -I /home/opam/.opam/5.4/lib/uutf -I lib/preface/.Preface.objs/byte -I lib/preface/.Preface.objs/native -I lib/preface_core/.preface_core.objs/byte -I lib/preface_core/.preface_core.objs/native -I lib/preface_laws/.preface_laws.objs/byte -I lib/preface_laws/.preface_laws.objs/native -I lib/preface_make/.preface_make.objs/byte -I lib/preface_make/.preface_make.objs/native -I lib/preface_qcheck/.preface_qcheck.objs/byte -I lib/preface_qcheck/.preface_qcheck.objs/native -I lib/preface_specs/.preface_specs.objs/byte -I lib/preface_specs/.preface_specs.objs/native -I lib/preface_stdlib/.preface_stdlib.objs/byte -I lib/preface_stdlib/.preface_stdlib.objs/native -cmi-file test/preface_laws_test/.preface_laws_test.eobjs/byte/dune__exe__Misc.cmi -no-alias-deps -open Dune__exe -o test/preface_laws_test/.preface_laws_test.eobjs/native/dune__exe__Misc.cmx -c -impl test/preface_laws_test/misc.ml)
- File "test/preface_laws_test/misc.ml", line 37, characters 4-13:
- 37 | frequency [ (3, pure Lt); (3, pure Eq); (3, pure Gt) ]
- ^^^^^^^^^
- Alert deprecated: QCheck2.Gen.frequency
- Use [oneof_weighted] instead
- (cd _build/default/test/preface_examples_test && ./preface_example_test.exe)
- Testing `Preface examples'.
- This run has ID `9D7T0F0I'.
-
- [OK] The Arrow tutorial 0 run circuit using total....
- [OK] The Arrow tutorial 1 run circuit which compute average....
- [OK] The Arrow tutorial 2 run circuit which return true first and false after....
- [OK] The Arrow tutorial 3 run circuit wich store a value and returns it when it get a new one....
- [OK] Formlet using Validate 0 Simple validation with success....
- [OK] Formlet using Validate 1 Simple validation with failure (for age)....
- [OK] Formlet using Validate 2 Simple validation with failure (for firstname and lastname)....
- [OK] Formlet using Validate 3 Simple validation with failure (unchecked rules)....
- [OK] Formlet using Validate 4 Simple validation with failure (everything is bad)....
- [OK] Free Applicative Formlet 0 test with valid user....
- [OK] Free Applicative Formlet 1 test with missing field name....
- [OK] Free Applicative Formlet 2 test with missing field name and invalid age....
- [OK] Free Applicative Formlet 3 static analysis: count....
- [OK] Free Applicative Formlet 4 static analysis: fields....
- [OK] Shape validation using Validate 0 Simple validation of Circle....
- [OK] Shape validation using Validate 1 Simple validation of Rectangle....
- [OK] Shape validation using Validate 2 Simple validation of Rectangle with one failure....
- [OK] Shape validation using Validate 3 Simple validation of Rectangle with two failures....
- [OK] Free Monad console IO 0 write hello....
- [OK] Free Monad console IO 1 write hello alice....
- [OK] Free Monad console IO 2 read alice....
- [OK] Free Monad console IO 3 read alice twice....
- [OK] Free Monad console IO 4 read alice and write it....
- [OK] Free Monad console IO 5 read alice and write hello....
- [OK] Free Monad console IO 6 read alice and write hello using id monad....
- [OK] Free Monad console IO 7 test `need interaction` when interaction is needed....
- [OK] Free Monad console IO 8 test `need interaction` when interaction is not needed....
- [OK] Free Monad console IO using Functor Sum 0 write hello....
- [OK] Free Monad console IO using Functor Sum 1 write hello alice....
- [OK] Free Monad console IO using Functor Sum 2 read alice....
- [OK] Free Monad console IO using Functor Sum 3 read alice twice....
- [OK] Free Monad console IO using Functor Sum 4 read alice and write it....
- [OK] Free Monad console IO using Functor Sum 5 read alice and write hello....
- [OK] Freer Monad console IO 0 write hello....
- [OK] Freer Monad console IO 1 write hello alice....
- [OK] Freer Monad console IO 2 read alice....
- [OK] Freer Monad console IO 3 read alice twice....
- [OK] Freer Monad console IO 4 read alice and write it....
- [OK] Freer Monad console IO 5 read alice and write hello....
- [OK] Freer Monad OS effect 0 Happy path: perform program without path....
- [OK] Freer Monad OS effect 1 Happy path: perform program with path....
- [OK] Freer Monad OS effect 2 Unhappy path: perform program without path....
- [OK] Freer Monad OS effect with explicit continuation 0 Happy path: perform program without path....
- [OK] Freer Monad OS effect with explicit continuation 1 Happy path: perform program with path....
- [OK] Freer Monad OS effect with explicit continuation 2 Unhappy path: perform program without path....
- [OK] Freer To Monad 0 Program that returns Ok....
- [OK] Freer To Monad 1 Program that returns Error....
- [OK] Free Selective Ping Pong 0 test reading ping, writing pong....
- [OK] Free Selective Ping Pong 1 test reading not_ping, writing nothing....
- [OK] Free Selective Ping Pong 2 static analysis over effects....
- [OK] Freer Selective Ping Pong 0 test reading ping, writing pong....
- [OK] Freer Selective Ping Pong 1 test reading not_ping, writing nothing....
- [OK] Templating using Reader 0 Should transform a constant....
- [OK] Templating using Reader 1 Should transform a variable....
- [OK] Templating using Reader 2 Should not transform a variable....
- [OK] Templating using Reader 3 Should not transform a sequence of constants and variable....
- [OK] Read Debruijn term using Reader 0 Should transform a bind variable....
- [OK] Read Debruijn term using Reader 1 Should transform a free variable....
- [OK] Read Debruijn term using Reader 2 Should transform a identity abtraction....
- [OK] Read Debruijn term using Reader 3 Should transform an application....
- [OK] Over Approximation 0 over approximation with Selective.if_....
- [OK] Under Approximation 0 under approximation with Selective.if_....
- [OK] Xml to Stax reader 0 Should transform a pcdata....
- [OK] Xml to Stax reader 1 Should transform a tag....
- [OK] Xml to Stax reader 2 Should transform a sequence....
- [OK] Xml to Stax reader 3 Should transform empty....
- [OK] Dependencies computing using Traced Comonad 0 Deps for preface_make....
- [OK] Dependencies computing using Traced Comonad 1 Deps for preface_stdlib....
- [OK] Dependencies computing using Traced Comonad 2 Deps for preface_specs....
- [OK] Dependencies computing using Traced Comonad 3 Deps for preface_preface....
- [OK] Pretty Printer using contravariants functors 0 Pretty print a Ford Mustang....
- [OK] Pretty Printer using contravariants functors 1 Pretty print a Toyota Corolla....
-
- Full test results in `~/.opam/5.4/.opam-switch/build/preface.1.1.0/_build/default/test/preface_examples_test/_build/_tests/Preface examples'.
- Test Successful in 0.019s. 72 tests run.
- (cd _build/default/test/preface_stdlib_test && ./preface_stdlib_test.exe)
- Testing `Preface_stdlib'.
- This run has ID `R55WDAIA'.
-
- [OK] Identity 0 Select left.
- [OK] Identity 1 Select right.
- [OK] Identity 2 Branch left.
- [OK] Identity 3 Branch right.
- [OK] Identity 4 If then left.
- [OK] Identity 5 If else right.
- [OK] Identity 6 Infix select left.
- [OK] Identity 7 Infix select right.
- [OK] Identity 8 Or true false.
- [OK] Identity 9 Or true true.
- [OK] Identity 10 Or false false.
- [OK] Identity 11 Or false true.
- [OK] Identity 12 And true false.
- [OK] Identity 13 And true true.
- [OK] Identity 14 And false false.
- [OK] Identity 15 And false true.
- [OK] Continuation 0 Map.
- [OK] Continuation 1 Apply.
- [OK] Continuation 2 Bind.
- [OK] List 0 Fold_map over values.
- [OK] List 1 Fold_map over empty.
- [OK] List 2 Sequence with valid input and appl...
- [OK] List 3 Sequence with invalid input and ap...
- [OK] List 4 Sequence with valid input with monad.
- [OK] List 5 Sequence with invalid input with m...
- [OK] Nonempty_list 0 Traverse through nonempty list ove...
- [OK] Nonempty_list 1 Traverse through nonempty list ove...
- [OK] Nonempty_list 2 Traverse through nonempty list ove...
- [OK] Nonempty_list 3 Traverse through nonempty list ove...
- [OK] Seq 0 Fold_map over values.
- [OK] Seq 1 Fold_map over empty.
- [OK] Seq 2 Sequence with valid input and appl...
- [OK] Seq 3 Sequence with invalid input and ap...
- [OK] Seq 4 Sequence with valid input with monad.
- [OK] Seq 5 Sequence with invalid input with m...
- [OK] Option 0 Map scenario 1.
- [OK] Option 1 Map scenario 2.
- [OK] Option 2 Parallel validation 1.
- [OK] Option 3 Parallel validation 2.
- [OK] Option 4 Parallel validation 3.
- [OK] Option 5 Parallel validation 4.
- [OK] Option 6 Sequential validation 1.
- [OK] Option 7 Sequential validation 2.
- [OK] Option 8 Sequential validation 3.
- [OK] Option 9 Sequential validation 4.
- [OK] Option 10 Sequential computing 1.
- [OK] Option 11 Sequential computing 2.
- [OK] Option 12 Fold_map over values.
- [OK] Option 13 Fold_map over empty.
- [OK] Option 14 If over valid predicate.
- [OK] Option 15 If over invalid predicate.
- [OK] Option 16 Unless over valid predicate.
- [OK] Option 17 Unless over invalid predicate.
- [OK] Option 18 Or with a first valid value.
- [OK] Option 19 Or with a second valid value.
- [OK] Option 20 Or with invalid on both.
- [OK] State 0 Should retrieve value.
- [OK] State 1 Should retrieve and set new value.
- [OK] State 2 Should modify a value.
- [OK] State 3 Should set and modify a value.
- [OK] State 4 Should get and modify a value.
- [OK] State 5 Should set modify and get a value.
- [OK] State 6 Should get modify and get a value.
- [OK] Stream 0 Extract.
- [OK] Stream 1 Extend.
- [OK] Stream 2 Infix Extend.
- [OK] Stream 3 Flipped Infix Extend.
- [OK] Stream 4 Compose right to left.
- [OK] Stream 5 Lift.
- [OK] Stream 6 Lift2.
- [OK] Stream 7 Lift3.
- [OK] Stream 8 Syntax Extend.
- [OK] Stream 9 Compose left to right.
- [OK] Stream 10 Infix Compose left to right.
- [OK] Stream 11 Infix Compose right to left.
- [OK] Stream 12 Apply.
- [OK] Stream 13 Inverse apply.
- [OK] Stream 14 Discard first.
- [OK] Stream 15 Discard second.
- [OK] Stream 16 Get head.
- [OK] Stream 17 Get head of tail.
- [OK] Stream 18 Cons.
- [OK] Stream 19 Access with valid offset.
- [OK] Stream 20 Access with invalid offset.
- [OK] Stream 21 Get fibonacci numbers.
- [OK] Stream 22 Drop and take.
- [OK] Stream 23 Takewhile.
- [OK] Stream 24 Dropwhile.
- [OK] Try 0 Simple validation with success.
- [OK] Try 1 Simple validation failure (for name).
- [OK] Try 2 Simple validation failure (for age).
- [OK] Pair 0 fst.
- [OK] Pair 1 snd.
- [OK] Pair 2 swap.
- [OK] Pair 3 curry.
- [OK] Pair 4 uncurry.
- [OK] Pair 5 &.
- [OK] Pair 6 map &.
- [OK] Predicate 0 negate.
- [OK] Predicate 1 tautology.
- [OK] Predicate 2 contradiction.
- [OK] Store 0 Test for pos.
- [OK] Store 1 Test for seek.
- [OK] Store 2 Test for seeks.
- [OK] Store 3 Test for warehouse pos.
- [OK] Store 4 Test for warehouse extract.
- [OK] Store 5 Test for warehouse peek.
- [OK] Store 6 Test for warehouse peeks.
- [OK] Store 7 Test for warehouse seek.
- [OK] Store 8 Test for warehouse seeks.
- [OK] Store 9 Test for warehouse experiment.
- [OK] Env 0 Test for ask.
- [OK] Env 1 Test for asks 1.
- [OK] Env 2 Test for asks 2.
- [OK] Env 3 Test for get_char.
- [OK] Env 4 test for truncate settings.
- [OK] Env 5 test for padding settings.
- [OK] Env 6 test for pipelining padding and tr...
- [OK] Env 7 test for pipelining padding and tr...
- [OK] Traced 0 Test for traced with neutral sum.
- [OK] Traced 1 Test for traced sum.
- [OK] Traced 2 Test for traced sum with extend.
-
- Full test results in `~/.opam/5.4/.opam-switch/build/preface.1.1.0/_build/default/test/preface_stdlib_test/_build/_tests/Preface_stdlib'.
- Test Successful in 0.024s. 122 tests run.
- (cd _build/default/test/preface_laws_test && ./preface_laws_test.exe)
- qcheck random seed: 358299158
- Testing `Preface Laws'.
- This run has ID `HLHTVBRN'.
-
- [OK] Sum monoid 0 (a <|> b) <|> c = a <|> (b <|> c)....
- [OK] Sum monoid 1 neutral <|> x = x....
- [OK] Sum monoid 2 x <|> neutral = x....
- [OK] Prod Monoid 0 (a <|> b) <|> c = a <|> (b <|> c)....
- [OK] Prod Monoid 1 neutral <|> x = x....
- [OK] Prod Monoid 2 x <|> neutral = x....
- [OK] Bool Meet_semilattice 0 meet x (meet y z) = meet (meet x y) z....
- [OK] Bool Meet_semilattice 1 meet x y = meet y x....
- [OK] Bool Meet_semilattice 2 meet x x = x....
- [OK] Ord Meet_semilattice 0 meet x (meet y z) = meet (meet x y) z....
- [OK] Ord Meet_semilattice 1 meet x y = meet y x....
- [OK] Ord Meet_semilattice 2 meet x x = x....
- [OK] Bool Join_semilattice 0 join x (join y z) = join (join x y) z....
- [OK] Bool Join_semilattice 1 join x y = join y x....
- [OK] Bool Join_semilattice 2 join x x = x....
- [OK] Bool Bounded_meet_semilattice 0 meet x (meet y z) = meet (meet x y) z....
- [OK] Bool Bounded_meet_semilattice 1 meet x y = meet y x....
- [OK] Bool Bounded_meet_semilattice 2 meet x x = x....
- [OK] Bool Bounded_meet_semilattice 3 meet x top = x....
- [OK] Bool Bounded_join_semilattice 0 join x (join y z) = join (join x y) z....
- [OK] Bool Bounded_join_semilattice 1 join x y = join y x....
- [OK] Bool Bounded_join_semilattice 2 join x x = x....
- [OK] Bool Bounded_join_semilattice 3 join x bottom = x....
- [OK] Bool Bounded_lattice 0 join x (join y z) = join (join x y) z....
- [OK] Bool Bounded_lattice 1 join x y = join y x....
- [OK] Bool Bounded_lattice 2 join x x = x....
- [OK] Bool Bounded_lattice 3 join x bottom = x....
- [OK] Bool Bounded_lattice 4 meet x (meet y z) = meet (meet x y) z....
- [OK] Bool Bounded_lattice 5 meet x y = meet y x....
- [OK] Bool Bounded_lattice 6 meet x x = x....
- [OK] Bool Bounded_lattice 7 meet x top = x....
- [OK] Bool Bounded_lattice 8 meet a (join a b) = a....
- [OK] Bool Bounded_lattice 9 meet a (join a b) = a....
- [OK] Bool lattice 0 join x (join y z) = join (join x y) z....
- [OK] Bool lattice 1 join x y = join y x....
- [OK] Bool lattice 2 join x x = x....
- [OK] Bool lattice 3 meet x (meet y z) = meet (meet x y) z....
- [OK] Bool lattice 4 meet x y = meet y x....
- [OK] Bool lattice 5 meet x x = x....
- [OK] Bool lattice 6 meet a (join a b) = a....
- [OK] Bool lattice 7 join a (meet a b) = a....
- [OK] Ord Join_semilattice 0 join x (join y z) = join (join x y) z....
- [OK] Ord Join_semilattice 1 join x y = join y x....
- [OK] Ord Join_semilattice 2 join x x = x....
- [OK] YOCaml Profunctor 0 dimap id id = id....
- [OK] YOCaml Profunctor 1 contramap_fst id = id....
- [OK] YOCaml Profunctor 2 map_snd id = id....
- [OK] YOCaml Profunctor 3 dimap f g = contramap_fst f % map_snd g....
- [OK] YOCaml Profunctor 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] YOCaml Profunctor 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] YOCaml Profunctor 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] YOCaml Strong 0 dimap id id = id....
- [OK] YOCaml Strong 1 contramap_fst id = id....
- [OK] YOCaml Strong 2 map_snd id = id....
- [OK] YOCaml Strong 3 dimap f g = contramap_fst f % map_snd g....
- [OK] YOCaml Strong 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] YOCaml Strong 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] YOCaml Strong 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] YOCaml Strong 7 fst = dimap swap swap % snd....
- [OK] YOCaml Strong 8 contramap_fst (fun (x, _) -> x) = map_snd (fun (x, _) -> x) % fst....
- [OK] YOCaml Strong 9 contramap_fst (Fun.Strong.snd f) % fst = map_snd (Fun.Strong.snd f) % fst....
- [OK] YOCaml Strong 10 fst % fst = dimap assoc unassoc % fst....
- [OK] YOCaml Strong 11 snd = dimap swap swap % fst....
- [OK] YOCaml Strong 12 contramap_fst (fun (_, x) -> x) = map_snd (fun (_, x) -> x) % snd....
- [OK] YOCaml Strong 13 contramap_fst (Fun.Strong.fst f) % snd = map_snd (Fun.Strong.fst f) % snd....
- [OK] YOCaml Strong 14 snd % snd = dimap unassoc assoc % snd....
- [OK] YOCaml Choice 0 dimap id id = id....
- [OK] YOCaml Choice 1 contramap_fst id = id....
- [OK] YOCaml Choice 2 map_snd id = id....
- [OK] YOCaml Choice 3 dimap f g = contramap_fst f % map_snd g....
- [OK] YOCaml Choice 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] YOCaml Choice 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] YOCaml Choice 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] YOCaml Choice 7 left = dimap swap swap % right....
- [OK] YOCaml Choice 8 map_snd Either.left = contramap_fst Either.left % left....
- [OK] YOCaml Choice 9 contramap_fst (Fun.Choice.right f) % left = map_snd (Fun.Choice.right f) % left....
- [OK] YOCaml Choice 10 left % left = dimap assoc unassoc % left....
- [OK] YOCaml Choice 11 right = dimap swap swap % left....
- [OK] YOCaml Choice 12 map_snd Either.right = contramap_fst Either.right % right....
- [OK] YOCaml Choice 13 contramap_fst (Fun.Choice.left f) % right = map_snd (Fun.Choice.left f) % right....
- [OK] YOCaml Choice 14 right % right = dimap unassoc assoc % left....
- [OK] YOCaml Semigroupoid 0 f % (g % h) = (f % g) % h....
- [OK] YOCaml Categrory 0 f % (g % h) = (f % g) % h....
- [OK] YOCaml Categrory 1 f % id = f....
- [OK] YOCaml Categrory 2 id % f = f....
- [OK] YOCaml Arrow 0 f % (g % h) = (f % g) % h....
- [OK] YOCaml Arrow 1 f % id = f....
- [OK] YOCaml Arrow 2 id % f = f....
- [OK] YOCaml Arrow 3 arrow Fun.id = id....
- [OK] YOCaml Arrow 4 arrow (fun x -> f (g x)) = arrow f >>> arrow g....
- [OK] YOCaml Arrow 5 fst (arrow f) = arrow (fun (x, y) -> (f x, y))....
- [OK] YOCaml Arrow 6 fst (f >>> g) = fst f >>> fst g....
- [OK] YOCaml Arrow 7 fst f >>> arrow Stdlib.fst = arrow Stdlib.fst >>> f....
- [OK] YOCaml Arrow 8 fst f >>> arrow Fun.Arrow.(id *** g) = arrow Fun.Arrow.(id *** g) >>> fst g....
- [OK] YOCaml Arrow 9 (fst (fst f)) >>> arrow assoc = arrow assoc >>> fst f....
- [OK] YOCaml Arrow Choice 0 f % (g % h) = (f % g) % h....
- [OK] YOCaml Arrow Choice 1 f % id = f....
- [OK] YOCaml Arrow Choice 2 id % f = f....
- [OK] YOCaml Arrow Choice 3 arrow Fun.id = id....
- [OK] YOCaml Arrow Choice 4 arrow (fun x -> f (g x)) = arrow f >>> arrow g....
- [OK] YOCaml Arrow Choice 5 fst (arrow f) = arrow (fun (x, y) -> (f x, y))....
- [OK] YOCaml Arrow Choice 6 fst (f >>> g) = fst f >>> fst g....
- [OK] YOCaml Arrow Choice 7 fst f >>> arrow Stdlib.fst = arrow Stdlib.fst >>> f....
- [OK] YOCaml Arrow Choice 8 fst f >>> arrow Fun.Arrow.(id *** g) = arrow Fun.Arrow.(id *** g) >>> fst g....
- [OK] YOCaml Arrow Choice 9 (fst (fst f)) >>> arrow assoc = arrow assoc >>> fst f....
- [OK] YOCaml Arrow Choice 10 left (arrow f) = arrow Fun.Arrow_choice.(left f)....
- [OK] YOCaml Arrow Choice 11 left (f >>> g) = left f >>> left g....
- [OK] YOCaml Arrow Choice 12 f >>> arrow Either.left = arrow Either.left >>> left f....
- [OK] YOCaml Arrow Choice 13 left >>> arrow Fun.Arrow_choice.(id +++ g) = arrow Fun.Arrow_choice.(id +++ g) >>> left f....
- [OK] YOCaml Arrow Choice 14 left (left f) >>> arrow assoc_either = arrow assoc_either >>> left f....
- [OK] Over Sum Applicative 0 map id = id....
- [OK] Over Sum Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Over Sum Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Over Sum Applicative 3 u <* v = lift2 const u v....
- [OK] Over Sum Applicative 4 pure id <*> x = x....
- [OK] Over Sum Applicative 5 pure f <*> pure x = pure f x....
- [OK] Over Sum Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Over Sum Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Over Sum Applicative 8 map f x = pure f <*> x....
- [OK] Over Sum Selective 0 map id = id....
- [OK] Over Sum Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Over Sum Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Over Sum Selective 3 u <* v = lift2 const u v....
- [OK] Over Sum Selective 4 pure id <*> x = x....
- [OK] Over Sum Selective 5 pure f <*> pure x = pure f x....
- [OK] Over Sum Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Over Sum Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Over Sum Selective 8 map f x = pure f <*> x....
- [OK] Over Sum Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Over Sum Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Over Sum Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Over Sum Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Over Sum Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Over Sum Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Over Sum Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Under Sum Applicative 0 map id = id....
- [OK] Under Sum Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Under Sum Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Under Sum Applicative 3 u <* v = lift2 const u v....
- [OK] Under Sum Applicative 4 pure id <*> x = x....
- [OK] Under Sum Applicative 5 pure f <*> pure x = pure f x....
- [OK] Under Sum Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Under Sum Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Under Sum Applicative 8 map f x = pure f <*> x....
- [OK] Under Sum Selective 0 map id = id....
- [OK] Under Sum Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Under Sum Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Under Sum Selective 3 u <* v = lift2 const u v....
- [OK] Under Sum Selective 4 pure id <*> x = x....
- [OK] Under Sum Selective 5 pure f <*> pure x = pure f x....
- [OK] Under Sum Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Under Sum Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Under Sum Selective 8 map f x = pure f <*> x....
- [OK] Under Sum Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Under Sum Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Under Sum Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Under Sum Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Under Sum Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Under Sum Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Under Sum Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Over Prod Applicative 0 map id = id....
- [OK] Over Prod Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Over Prod Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Over Prod Applicative 3 u <* v = lift2 const u v....
- [OK] Over Prod Applicative 4 pure id <*> x = x....
- [OK] Over Prod Applicative 5 pure f <*> pure x = pure f x....
- [OK] Over Prod Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Over Prod Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Over Prod Applicative 8 map f x = pure f <*> x....
- [OK] Over Prod Selective 0 map id = id....
- [OK] Over Prod Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Over Prod Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Over Prod Selective 3 u <* v = lift2 const u v....
- [OK] Over Prod Selective 4 pure id <*> x = x....
- [OK] Over Prod Selective 5 pure f <*> pure x = pure f x....
- [OK] Over Prod Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Over Prod Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Over Prod Selective 8 map f x = pure f <*> x....
- [OK] Over Prod Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Over Prod Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Over Prod Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Over Prod Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Over Prod Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Over Prod Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Over Prod Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Under Prod Applicative 0 map id = id....
- [OK] Under Prod Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Under Prod Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Under Prod Applicative 3 u <* v = lift2 const u v....
- [OK] Under Prod Applicative 4 pure id <*> x = x....
- [OK] Under Prod Applicative 5 pure f <*> pure x = pure f x....
- [OK] Under Prod Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Under Prod Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Under Prod Applicative 8 map f x = pure f <*> x....
- [OK] Under Prod Selective 0 map id = id....
- [OK] Under Prod Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Under Prod Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Under Prod Selective 3 u <* v = lift2 const u v....
- [OK] Under Prod Selective 4 pure id <*> x = x....
- [OK] Under Prod Selective 5 pure f <*> pure x = pure f x....
- [OK] Under Prod Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Under Prod Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Under Prod Selective 8 map f x = pure f <*> x....
- [OK] Under Prod Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Under Prod Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Under Prod Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Under Prod Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Under Prod Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Under Prod Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Under Prod Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Identity Invariant 0 invmap id id = id....
- [OK] Identity Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Identity Functor 0 map id = id....
- [OK] Identity Functor 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Apply 0 map id = id....
- [OK] Identity Apply 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Apply 2 u *> v = (id <$ u) <*> v....
- [OK] Identity Apply 3 u <* v = lift2 const u v....
- [OK] Identity Applicative 0 map id = id....
- [OK] Identity Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Identity Applicative 3 u <* v = lift2 const u v....
- [OK] Identity Applicative 4 pure id <*> x = x....
- [OK] Identity Applicative 5 pure f <*> pure x = pure f x....
- [OK] Identity Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Identity Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Identity Applicative 8 map f x = pure f <*> x....
- [OK] Identity Selective 0 map id = id....
- [OK] Identity Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Identity Selective 3 u <* v = lift2 const u v....
- [OK] Identity Selective 4 pure id <*> x = x....
- [OK] Identity Selective 5 pure f <*> pure x = pure f x....
- [OK] Identity Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Identity Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Identity Selective 8 map f x = pure f <*> x....
- [OK] Identity Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Identity Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Identity Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Identity Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Identity Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Identity Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Identity Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Identity Selective 16 f <*> x = select (map Either.left f) (map ( |> ) x....
- [OK] Identity Selective 17 x *> (y <*? z) = (x *> y) <*? z....
- [OK] Identity Bind 0 map id = id....
- [OK] Identity Bind 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Bind 2 join % join = join % map join....
- [OK] Identity Bind 3 map f % join = join % map (map f)....
- [OK] Identity Bind 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Identity Bind 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Identity Monad 0 map id = id....
- [OK] Identity Monad 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Monad 2 join % join = join % map join....
- [OK] Identity Monad 3 map f % join = join % map (map f)....
- [OK] Identity Monad 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Identity Monad 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Identity Monad 6 join % map return = id = join % return....
- [OK] Identity Monad 7 map f % return = return % f....
- [OK] Identity Monad 8 return x >>= f = f x....
- [OK] Identity Monad 9 x >>= return = x....
- [OK] Identity Monad 10 return >=> f = f....
- [OK] Identity Monad 11 f >=> return = f....
- [OK] Identity Comonad 0 map id = id....
- [OK] Identity Comonad 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Comonad 2 extend extract = id....
- [OK] Identity Comonad 3 extract % extend = f....
- [OK] Identity Comonad 4 extend f % extend g = extend (f % extend g)....
- [OK] Identity Comonad 5 f =>= extract = f....
- [OK] Identity Comonad 6 extract =>= f = f....
- [OK] Identity Comonad 7 (f =>= g) =>= h = f =>= (g =>= h)....
- [OK] Identity Comonad 8 extract % duplicate = id....
- [OK] Identity Comonad 9 map extract % duplicate = id....
- [OK] Identity Comonad 10 duplicate % duplicate = map duplicate % duplicate....
- [OK] Identity Comonad 11 extend f = map f % duplicate....
- [OK] Identity Comonad 12 duplicate = extend id....
- [OK] Identity Comonad 13 map f = extend (f % extract)....
- [OK] Option Invariant 0 invmap id id = id....
- [OK] Option Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Option Functor 0 map id = id....
- [OK] Option Functor 1 map (f % g) = (map f) % (map g)....
- [OK] Option Alt 0 map id = id....
- [OK] Option Alt 1 map (f % g) = (map f) % (map g)....
- [OK] Option Alt 2 (a <|> b) <|> c = a <|> (b <|> c)....
- [OK] Option Alt 3 f <$> (a <|> b) = (f <$> a) <|> (f <$> b)....
- [OK] Option Apply 0 map id = id....
- [OK] Option Apply 1 map (f % g) = (map f) % (map g)....
- [OK] Option Apply 2 u *> v = (id <$ u) <*> v....
- [OK] Option Apply 3 u <* v = lift2 const u v....
- [OK] Option Applicative 0 map id = id....
- [OK] Option Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Option Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Option Applicative 3 u <* v = lift2 const u v....
- [OK] Option Applicative 4 pure id <*> x = x....
- [OK] Option Applicative 5 pure f <*> pure x = pure f x....
- [OK] Option Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- ...TRUNCATED BY DUNE...
- [OK] Try Applicative 4 pure id <*> x = x....
- [OK] Try Applicative 5 pure f <*> pure x = pure f x....
- [OK] Try Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Try Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Try Applicative 8 map f x = pure f <*> x....
- [OK] Try Selective 0 map id = id....
- [OK] Try Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Try Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Try Selective 3 u <* v = lift2 const u v....
- [OK] Try Selective 4 pure id <*> x = x....
- [OK] Try Selective 5 pure f <*> pure x = pure f x....
- [OK] Try Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Try Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Try Selective 8 map f x = pure f <*> x....
- [OK] Try Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Try Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Try Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Try Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Try Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Try Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Try Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Try Selective 16 f <*> x = select (map Either.left f) (map ( |> ) x....
- [OK] Try Selective 17 x *> (y <*? z) = (x *> y) <*? z....
- [OK] Try Bind 0 map id = id....
- [OK] Try Bind 1 map (f % g) = (map f) % (map g)....
- [OK] Try Bind 2 join % join = join % map join....
- [OK] Try Bind 3 map f % join = join % map (map f)....
- [OK] Try Bind 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Try Bind 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Try Monad 0 map id = id....
- [OK] Try Monad 1 map (f % g) = (map f) % (map g)....
- [OK] Try Monad 2 join % join = join % map join....
- [OK] Try Monad 3 map f % join = join % map (map f)....
- [OK] Try Monad 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Try Monad 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Try Monad 6 join % map return = id = join % return....
- [OK] Try Monad 7 map f % return = return % f....
- [OK] Try Monad 8 return x >>= f = f x....
- [OK] Try Monad 9 x >>= return = x....
- [OK] Try Monad 10 return >=> f = f....
- [OK] Try Monad 11 f >=> return = f....
- [OK] Try Foldable 0 fold_right f x z = (fold_map (module Endo) f x) z....
- [OK] Try Foldable 1 fold_left f z x = (fold_map (module Dual(Endo)) (Fun.flip f) x) z....
- [OK] Try Foldable 2 reduce (module M) = fold_map (module M) id....
- [OK] Try Traversable Monad 0 traverse id x = x....
- [OK] Try Traversable Applicative (using Option and Result) 0 traverse id x = x....
- [OK] Try Traversable Applicative (using Option and Result) 1 traverse (compose % map g % g) = compose % map (traverse g) % traverse f....
- [OK] Try Traversable Applicative (using Option and Result) 2 t % traverse f = traverse (t % f)....
- [OK] Validate Invariant 0 invmap id id = id....
- [OK] Validate Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Validate Functor 0 map id = id....
- [OK] Validate Functor 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Alt 0 map id = id....
- [OK] Validate Alt 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Alt 2 (a <|> b) <|> c = a <|> (b <|> c)....
- [OK] Validate Alt 3 f <$> (a <|> b) = (f <$> a) <|> (f <$> b)....
- [OK] Validate Apply 0 map id = id....
- [OK] Validate Apply 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Apply 2 u *> v = (id <$ u) <*> v....
- [OK] Validate Apply 3 u <* v = lift2 const u v....
- [OK] Validate Applicative 0 map id = id....
- [OK] Validate Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Validate Applicative 3 u <* v = lift2 const u v....
- [OK] Validate Applicative 4 pure id <*> x = x....
- [OK] Validate Applicative 5 pure f <*> pure x = pure f x....
- [OK] Validate Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Validate Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Validate Applicative 8 map f x = pure f <*> x....
- [OK] Validate Selective 0 map id = id....
- [OK] Validate Selective 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Selective 2 u *> v = (id <$ u) <*> v....
- [OK] Validate Selective 3 u <* v = lift2 const u v....
- [OK] Validate Selective 4 pure id <*> x = x....
- [OK] Validate Selective 5 pure f <*> pure x = pure f x....
- [OK] Validate Selective 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Validate Selective 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Validate Selective 8 map f x = pure f <*> x....
- [OK] Validate Selective 9 x <*? pure Fun.id = Either.case Fun.id Fun.id <$> x....
- [OK] Validate Selective 10 pure x <*? (y *> z) = (pure x <*? y) *> (pure x <*? z)....
- [OK] Validate Selective 11 x <*? (y <*? z) = (Either.(map_right right) <$> x) <*? ((fun x a -> Either.map ~left:(fun x -> (x, a)) ~right:(fun f -> f a) x) <$> y) <*? (uncurry <$> z)....
- [OK] Validate Selective 12 f <$> select x y = select (Either.map_right f <$> x) (map f <$> y)....
- [OK] Validate Selective 13 select (Either.map_left f <$> x) y = select x ((%>) f) <$> y)....
- [OK] Validate Selective 14 select x (f <$> y) = select (Either.map_left (flip f) <$> x) ((|>) <$> y)....
- [OK] Validate Selective 15 x <*? pure y = Either.case y Fun.id <$> x....
- [OK] Validate Bind 0 map id = id....
- [OK] Validate Bind 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Bind 2 join % join = join % map join....
- [OK] Validate Bind 3 map f % join = join % map (map f)....
- [OK] Validate Bind 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Validate Bind 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Validate Monad 0 map id = id....
- [OK] Validate Monad 1 map (f % g) = (map f) % (map g)....
- [OK] Validate Monad 2 join % join = join % map join....
- [OK] Validate Monad 3 map f % join = join % map (map f)....
- [OK] Validate Monad 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Validate Monad 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Validate Monad 6 join % map return = id = join % return....
- [OK] Validate Monad 7 map f % return = return % f....
- [OK] Validate Monad 8 return x >>= f = f x....
- [OK] Validate Monad 9 x >>= return = x....
- [OK] Validate Monad 10 return >=> f = f....
- [OK] Validate Monad 11 f >=> return = f....
- [OK] Validate Foldable 0 fold_right f x z = (fold_map (module Endo) f x) z....
- [OK] Validate Foldable 1 fold_left f z x = (fold_map (module Dual(Endo)) (Fun.flip f) x) z....
- [OK] Validate Foldable 2 reduce (module M) = fold_map (module M) id....
- [OK] Validate Traversable Monad 0 traverse id x = x....
- [OK] Validate Traversable Applicative (using Option and Result) 0 traverse id x = x....
- [OK] Validate Traversable Applicative (using Option and Result) 1 traverse (compose % map g % g) = compose % map (traverse g) % traverse f....
- [OK] Validate Traversable Applicative (using Option and Result) 2 t % traverse f = traverse (t % f)....
- [OK] Fun Profunctor 0 dimap id id = id....
- [OK] Fun Profunctor 1 contramap_fst id = id....
- [OK] Fun Profunctor 2 map_snd id = id....
- [OK] Fun Profunctor 3 dimap f g = contramap_fst f % map_snd g....
- [OK] Fun Profunctor 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] Fun Profunctor 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] Fun Profunctor 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] Fun Strong 0 dimap id id = id....
- [OK] Fun Strong 1 contramap_fst id = id....
- [OK] Fun Strong 2 map_snd id = id....
- [OK] Fun Strong 3 dimap f g = contramap_fst f % map_snd g....
- [OK] Fun Strong 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] Fun Strong 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] Fun Strong 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] Fun Strong 7 fst = dimap swap swap % snd....
- [OK] Fun Strong 8 contramap_fst (fun (x, _) -> x) = map_snd (fun (x, _) -> x) % fst....
- [OK] Fun Strong 9 contramap_fst (Fun.Strong.snd f) % fst = map_snd (Fun.Strong.snd f) % fst....
- [OK] Fun Strong 10 fst % fst = dimap assoc unassoc % fst....
- [OK] Fun Strong 11 snd = dimap swap swap % fst....
- [OK] Fun Strong 12 contramap_fst (fun (_, x) -> x) = map_snd (fun (_, x) -> x) % snd....
- [OK] Fun Strong 13 contramap_fst (Fun.Strong.fst f) % snd = map_snd (Fun.Strong.fst f) % snd....
- [OK] Fun Strong 14 snd % snd = dimap unassoc assoc % snd....
- [OK] Fun Choice 0 dimap id id = id....
- [OK] Fun Choice 1 contramap_fst id = id....
- [OK] Fun Choice 2 map_snd id = id....
- [OK] Fun Choice 3 dimap f g = contramap_fst f % map_snd g....
- [OK] Fun Choice 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] Fun Choice 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] Fun Choice 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] Fun Choice 7 left = dimap swap swap % right....
- [OK] Fun Choice 8 map_snd Either.left = contramap_fst Either.left % left....
- [OK] Fun Choice 9 contramap_fst (Fun.Choice.right f) % left = map_snd (Fun.Choice.right f) % left....
- [OK] Fun Choice 10 left % left = dimap assoc unassoc % left....
- [OK] Fun Choice 11 right = dimap swap swap % left....
- [OK] Fun Choice 12 map_snd Either.right = contramap_fst Either.right % right....
- [OK] Fun Choice 13 contramap_fst (Fun.Choice.left f) % right = map_snd (Fun.Choice.left f) % right....
- [OK] Fun Choice 14 right % right = dimap unassoc assoc % left....
- [OK] Fun Closed 0 dimap id id = id....
- [OK] Fun Closed 1 contramap_fst id = id....
- [OK] Fun Closed 2 map_snd id = id....
- [OK] Fun Closed 3 dimap f g = contramap_fst f % map_snd g....
- [OK] Fun Closed 4 dimap (f % g) (h % i) = dimap f h % dimap g i....
- [OK] Fun Closed 5 contramap_fst (f % g) = contramap_fst f % contramap_fst g....
- [OK] Fun Closed 6 map_snd (f % g) = map_snd f % map_snd g....
- [OK] Fun Closed 7 contrampa_fst (fun x -> x % f) % closed = map_snd (fun x -> x % f) % closed....
- [OK] Fun Closed 8 closed % closed = dimap uncurry curry % closed....
- [OK] Fun Closed 9 dimap const (fun f -> f ()) % closed = id....
- [OK] Fun Semigroupoid 0 f % (g % h) = (f % g) % h....
- [OK] Fun Category 0 f % (g % h) = (f % g) % h....
- [OK] Fun Category 1 f % id = f....
- [OK] Fun Category 2 id % f = f....
- [OK] Fun Arrow 0 f % (g % h) = (f % g) % h....
- [OK] Fun Arrow 1 f % id = f....
- [OK] Fun Arrow 2 id % f = f....
- [OK] Fun Arrow 3 arrow Fun.id = id....
- [OK] Fun Arrow 4 arrow (fun x -> f (g x)) = arrow f >>> arrow g....
- [OK] Fun Arrow 5 fst (arrow f) = arrow (fun (x, y) -> (f x, y))....
- [OK] Fun Arrow 6 fst (f >>> g) = fst f >>> fst g....
- [OK] Fun Arrow 7 fst f >>> arrow Stdlib.fst = arrow Stdlib.fst >>> f....
- [OK] Fun Arrow 8 fst f >>> arrow Fun.Arrow.(id *** g) = arrow Fun.Arrow.(id *** g) >>> fst g....
- [OK] Fun Arrow 9 (fst (fst f)) >>> arrow assoc = arrow assoc >>> fst f....
- [OK] Fun Arrow Choice 0 f % (g % h) = (f % g) % h....
- [OK] Fun Arrow Choice 1 f % id = f....
- [OK] Fun Arrow Choice 2 id % f = f....
- [OK] Fun Arrow Choice 3 arrow Fun.id = id....
- [OK] Fun Arrow Choice 4 arrow (fun x -> f (g x)) = arrow f >>> arrow g....
- [OK] Fun Arrow Choice 5 fst (arrow f) = arrow (fun (x, y) -> (f x, y))....
- [OK] Fun Arrow Choice 6 fst (f >>> g) = fst f >>> fst g....
- [OK] Fun Arrow Choice 7 fst f >>> arrow Stdlib.fst = arrow Stdlib.fst >>> f....
- [OK] Fun Arrow Choice 8 fst f >>> arrow Fun.Arrow.(id *** g) = arrow Fun.Arrow.(id *** g) >>> fst g....
- [OK] Fun Arrow Choice 9 (fst (fst f)) >>> arrow assoc = arrow assoc >>> fst f....
- [OK] Fun Arrow Choice 10 left (arrow f) = arrow Fun.Arrow_choice.(left f)....
- [OK] Fun Arrow Choice 11 left (f >>> g) = left f >>> left g....
- [OK] Fun Arrow Choice 12 f >>> arrow Either.left = arrow Either.left >>> left f....
- [OK] Fun Arrow Choice 13 left >>> arrow Fun.Arrow_choice.(id +++ g) = arrow Fun.Arrow_choice.(id +++ g) >>> left f....
- [OK] Fun Arrow Choice 14 left (left f) >>> arrow assoc_either = arrow assoc_either >>> left f....
- [OK] Fun Arrow Apply 0 f % (g % h) = (f % g) % h....
- [OK] Fun Arrow Apply 1 f % id = f....
- [OK] Fun Arrow Apply 2 id % f = f....
- [OK] Fun Arrow Apply 3 arrow Fun.id = id....
- [OK] Fun Arrow Apply 4 arrow (fun x -> f (g x)) = arrow f >>> arrow g....
- [OK] Fun Arrow Apply 5 fst (arrow f) = arrow (fun (x, y) -> (f x, y))....
- [OK] Fun Arrow Apply 6 fst (f >>> g) = fst f >>> fst g....
- [OK] Fun Arrow Apply 7 fst f >>> arrow Stdlib.fst = arrow Stdlib.fst >>> f....
- [OK] Fun Arrow Apply 8 fst f >>> arrow Fun.Arrow.(id *** g) = arrow Fun.Arrow.(id *** g) >>> fst g....
- [OK] Fun Arrow Apply 9 (fst (fst f)) >>> arrow assoc = arrow assoc >>> fst f....
- [OK] Fun Arrow Apply 10 fst (arrow (fun x -> arrow (fun y -> (x, y)))) >>> apply = id....
- [OK] Fun Arrow Apply 11 fst (arrow (fun x -> g >>> x)) >>> apply = snd g >>> apply....
- [OK] Fun Arrow Apply 12 fst (arrow (fun x -> x >>> h)) >>> apply = apply >>> h....
- [OK] Predicate Invariant 0 invmap id id = id....
- [OK] Predicate Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Predicate Contravariant 0 contramap id = id....
- [OK] Predicate Contravariant 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Predicate Divisible 0 contramap id = id....
- [OK] Predicate Divisible 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Predicate Divisible 2 divide (fun x -> (x, x)) m conquer = m....
- [OK] Predicate Divisible 3 divide (fun x -> (x, x)) conquer m = m....
- [OK] Predicate Divisible 4 divide (fun x -> (x, x)) (divide delta m n) o = divide (fun x -> (x, x)) m (divide delta n o)....
- [OK] Predicate Divisible 5 divide f m conquer = contramap (fst % f)....
- [OK] Predicate Divisible 6 divide f conquer m = contramap (snd % f)....
- [OK] Predicate Decidable 0 contramap id = id....
- [OK] Predicate Decidable 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Predicate Decidable 2 divide (fun x -> (x, x)) m conquer = m....
- [OK] Predicate Decidable 3 divide (fun x -> (x, x)) conquer m = m....
- [OK] Predicate Decidable 4 divide (fun x -> (x, x)) (divide delta m n) o = divide (fun x -> (x, x)) m (divide delta n o)....
- [OK] Predicate Decidable 5 divide f m conquer = contramap (fst % f)....
- [OK] Predicate Decidable 6 divide f conquer m = contramap (snd % f)....
- [OK] Predicate Decidable 7 choose Either.left m (lose f) = m....
- [OK] Predicate Decidable 8 choose Either.right (lose f) m = m....
- [OK] Equivalence Invariant 0 invmap id id = id....
- [OK] Equivalence Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Equivalence Contravariant 0 contramap id = id....
- [OK] Equivalence Contravariant 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Equivalence Divisible 0 contramap id = id....
- [OK] Equivalence Divisible 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Equivalence Divisible 2 divide (fun x -> (x, x)) m conquer = m....
- [OK] Equivalence Divisible 3 divide (fun x -> (x, x)) conquer m = m....
- [OK] Equivalence Divisible 4 divide (fun x -> (x, x)) (divide delta m n) o = divide (fun x -> (x, x)) m (divide delta n o)....
- [OK] Equivalence Divisible 5 divide f m conquer = contramap (fst % f)....
- [OK] Equivalence Divisible 6 divide f conquer m = contramap (snd % f)....
- [OK] Equivalence Decidable 0 contramap id = id....
- [OK] Equivalence Decidable 1 contramap (g % f) = (contramap f) % (contramap g)....
- [OK] Equivalence Decidable 2 divide (fun x -> (x, x)) m conquer = m....
- [OK] Equivalence Decidable 3 divide (fun x -> (x, x)) conquer m = m....
- [OK] Equivalence Decidable 4 divide (fun x -> (x, x)) (divide delta m n) o = divide (fun x -> (x, x)) m (divide delta n o)....
- [OK] Equivalence Decidable 5 divide f m conquer = contramap (fst % f)....
- [OK] Equivalence Decidable 6 divide f conquer m = contramap (snd % f)....
- [OK] Equivalence Decidable 7 choose Either.left m (lose f) = m....
- [OK] Equivalence Decidable 8 choose Either.right (lose f) m = m....
- [OK] Continuation Invariant 0 invmap id id = id....
- [OK] Continuation Invariant 1 (invmap g g') % (invmap f f') = invmap (g % g') (f % f')....
- [OK] Continuation Functor 0 map id = id....
- [OK] Continuation Functor 1 map (f % g) = (map f) % (map g)....
- [OK] Continuation Apply 0 map id = id....
- [OK] Continuation Apply 1 map (f % g) = (map f) % (map g)....
- [OK] Continuation Apply 2 u *> v = (id <$ u) <*> v....
- [OK] Continuation Apply 3 u <* v = lift2 const u v....
- [OK] Continuation Applicative 0 map id = id....
- [OK] Continuation Applicative 1 map (f % g) = (map f) % (map g)....
- [OK] Continuation Applicative 2 u *> v = (id <$ u) <*> v....
- [OK] Continuation Applicative 3 u <* v = lift2 const u v....
- [OK] Continuation Applicative 4 pure id <*> x = x....
- [OK] Continuation Applicative 5 pure f <*> pure x = pure f x....
- [OK] Continuation Applicative 6 f <*> pure x = pure ((|>) x) <*> f....
- [OK] Continuation Applicative 7 pure ( % ) <*> u <*> v <*> w = u <*> (v <*> w)....
- [OK] Continuation Applicative 8 map f x = pure f <*> x....
- [OK] Continuation Bind 0 map id = id....
- [OK] Continuation Bind 1 map (f % g) = (map f) % (map g)....
- [OK] Continuation Bind 2 join % join = join % map join....
- [OK] Continuation Bind 3 map f % join = join % map (map f)....
- [OK] Continuation Bind 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Continuation Bind 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Continuation Monad 0 map id = id....
- [OK] Continuation Monad 1 map (f % g) = (map f) % (map g)....
- [OK] Continuation Monad 2 join % join = join % map join....
- [OK] Continuation Monad 3 map f % join = join % map (map f)....
- [OK] Continuation Monad 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Continuation Monad 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Continuation Monad 6 join % map return = id = join % return....
- [OK] Continuation Monad 7 map f % return = return % f....
- [OK] Continuation Monad 8 return x >>= f = f x....
- [OK] Continuation Monad 9 x >>= return = x....
- [OK] Continuation Monad 10 return >=> f = f....
- [OK] Continuation Monad 11 f >=> return = f....
- [OK] Identity Writer Monad over Sum monoid 0 map id = id....
- [OK] Identity Writer Monad over Sum monoid 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Writer Monad over Sum monoid 2 join % join = join % map join....
- [OK] Identity Writer Monad over Sum monoid 3 map f % join = join % map (map f)....
- [OK] Identity Writer Monad over Sum monoid 4 x >>= (fun y -> f y >>= g) = (x >>= f) >>= g....
- [OK] Identity Writer Monad over Sum monoid 5 (f >=> g) >=> h = f >=> (g >=> h)....
- [OK] Identity Writer Monad over Sum monoid 6 join % map return = id = join % return....
- [OK] Identity Writer Monad over Sum monoid 7 map f % return = return % f....
- [OK] Identity Writer Monad over Sum monoid 8 return x >>= f = f x....
- [OK] Identity Writer Monad over Sum monoid 9 x >>= return = x....
- [OK] Identity Writer Monad over Sum monoid 10 return >=> f = f....
- [OK] Identity Writer Monad over Sum monoid 11 f >=> return = f....
- [OK] Identity Writer Functor Over Sum monoid 0 map id = id....
- [OK] Identity Writer Functor Over Sum monoid 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Writer Applicative Over Sum Monoid 0 map id = id....
- [OK] Identity Writer Applicative Over Sum Monoid 1 map (f % g) = (map f) % (map g)....
- [OK] Identity Writer Invariant Over Sum Monoid 0 map id = id....
- [OK] Identity Writer Invariant Over Sum Monoid 1 map (f % g) = (map f) % (map g)....
-
- Full test results in `~/.opam/5.4/.opam-switch/build/preface.1.1.0/_build/default/test/preface_laws_test/_build/_tests/Preface Laws'.
- Test Successful in 86.413s. 1345 tests run.
-> compiled preface.1.1.0
-> removed preface.1.1.0
-> installed preface.1.1.0
Done.
# To update the current shell environment, run: eval $(opam env)
2026-03-25 18:37.32 ---> saved as "72d6ead8b72cfd6761579fdcaf6ba310af922a022f9d035b42b10b588b347a67"
Job succeeded
2026-03-25 18:38.25: Job succeeded