From d433cfe6a3a41b397dfac589a15f19d31d040611 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Wed, 27 Sep 2023 10:02:35 +0200 Subject: [PATCH 1/4] add opposite semigroup and monoid --- src/Instances/OppositeMonoid.php | 46 +++++++++++++++++++++++++++++ src/Instances/OppositeSemigroup.php | 38 ++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/Instances/OppositeMonoid.php create mode 100644 src/Instances/OppositeSemigroup.php diff --git a/src/Instances/OppositeMonoid.php b/src/Instances/OppositeMonoid.php new file mode 100644 index 0000000..d2e924f --- /dev/null +++ b/src/Instances/OppositeMonoid.php @@ -0,0 +1,46 @@ + + * + * @psalm-immutable + */ +final class OppositeMonoid implements Monoid +{ + /** @var Monoid */ + private Monoid $monoid; + + /** + * @param Monoid $monoid + */ + public function __construct(Monoid $monoid) + { + $this->monoid = $monoid; + } + + /** + * @return A + */ + public function mempty() + { + return $this->monoid->mempty(); + } + + /** + * @param A $a + * @param A $b + * @return A + */ + public function append($a, $b) + { + return (new OppositeSemigroup($this->monoid))->append($a, $b); + } +} diff --git a/src/Instances/OppositeSemigroup.php b/src/Instances/OppositeSemigroup.php new file mode 100644 index 0000000..e35499c --- /dev/null +++ b/src/Instances/OppositeSemigroup.php @@ -0,0 +1,38 @@ + + * + * @psalm-immutable + */ +final class OppositeSemigroup implements Semigroup +{ + /** @var Semigroup */ + private Semigroup $semigroup; + + /** + * @param Semigroup $semigroup + */ + public function __construct(Semigroup $semigroup) + { + $this->semigroup = $semigroup; + } + + /** + * @param A $a + * @param A $b + * @return A + */ + public function append($a, $b) + { + return $this->semigroup->append($b, $a); + } +} From f39d9cb2e343b00fdf3bc7e9b2b59bbe6b8e5862 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Wed, 27 Sep 2023 10:31:17 +0200 Subject: [PATCH 2/4] list concatenation monoid should not invert arguments --- src/Instances/ListL/ConcatenationMonoid.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Instances/ListL/ConcatenationMonoid.php b/src/Instances/ListL/ConcatenationMonoid.php index 6122282..8187c53 100644 --- a/src/Instances/ListL/ConcatenationMonoid.php +++ b/src/Instances/ListL/ConcatenationMonoid.php @@ -29,6 +29,6 @@ public function mempty(): array */ public function append($a, $b) { - return array_merge($b, $a); + return array_merge($a, $b); } } From 6724f41deef4a556bcb375309c52262c2ecf9429 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Wed, 27 Sep 2023 10:49:05 +0200 Subject: [PATCH 3/4] disallow formatting rule on classes with empty body --- .php-cs-fixer.dist.php | 3 ++- bin/php-cs-fixer | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index ed3807f..2f929af 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -12,5 +12,6 @@ 'phpdoc_align' => ['align' => 'left'], 'phpdoc_to_comment' => false, 'concat_space' => ['spacing' => 'one'], - 'static_lambda' => true + 'static_lambda' => true, + 'single_line_empty_body' => false ])->setFinder($finder); diff --git a/bin/php-cs-fixer b/bin/php-cs-fixer index c587315..d4d7eab 100755 --- a/bin/php-cs-fixer +++ b/bin/php-cs-fixer @@ -1,3 +1,3 @@ #!/usr/bin/env bash -docker run --rm -v $(pwd):/app -w=/app php:8.1.0 vendor/bin/php-cs-fixer fix src --allow-risky=yes --format=checkstyle "$@" +docker run --rm -v $(pwd):/app -w=/app php:8.1.0 vendor/bin/php-cs-fixer fix src -vvv --allow-risky=yes --format=checkstyle "$@" From 29b91bbb93ed81118549dc0e234b01767a697c43 Mon Sep 17 00:00:00 2001 From: Marco Perone Date: Wed, 27 Sep 2023 10:53:07 +0200 Subject: [PATCH 4/4] changelog for version 1.4 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34039c5..7a7304c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic versioning](http://semver.org/). +## [1.4.0] - 2023-09-27 + +- introduce `OppositeSemigroup` and `OppositMonoid` +- do not flip arguments on `ListL/ConcatenationMonoid` + ## [1.3.0] - 2023-08-23 - introduce `Alt` and `Plus` typeclasses