Skip to content

Commit 3fe782f

Browse files
committed
make Monoids enums
1 parent 6a6b272 commit 3fe782f

10 files changed

Lines changed: 25 additions & 14 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
- `Innmind\Immutable\Set` no longer implements `Countable`
2424
- Requires PHP `8.4`
2525
- `Innmind\Immutable\Predicate` is now a final class
26+
- `Innmind\Immutable\Monoid\*` are now enums with a single case called `monoid`
2627

2728
### Removed
2829

docs/structures/sequence.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ use Innmind\Immutable\Monoid\Concat;
598598

599599
$lines = Sequence::of("foo\n", "bar\n", 'baz')
600600
->map(fn($line) => Str::of($line))
601-
->fold(new Concat);
601+
->fold(Concat::monoid);
602602

603603
$lines->equals("foo\nbar\nbaz"); // true
604604
```

proofs/monoid/arrayMerge.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@
3232
yield properties(
3333
'ArrayMerge properties',
3434
Monoid::properties($set, $equals),
35-
Set::of(new ArrayMerge),
35+
Set::of(ArrayMerge::monoid),
3636
);
3737

3838
foreach (Monoid::list($set, $equals) as $property) {
3939
yield proof(
4040
'ArrayMerge property',
4141
given($property),
42-
static fn($assert, $property) => $property->ensureHeldBy($assert, new ArrayMerge),
42+
static fn($assert, $property) => $property->ensureHeldBy($assert, ArrayMerge::monoid),
4343
);
4444
}
4545
};

proofs/monoid/concat.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
yield properties(
1616
'Concat properties',
1717
Monoid::properties($set, $equals),
18-
Set::of(new Concat),
18+
Set::of(Concat::monoid),
1919
);
2020

2121
foreach (Monoid::list($set, $equals) as $property) {
2222
yield proof(
2323
'Concat property',
2424
given($property),
25-
static fn($assert, $property) => $property->ensureHeldBy($assert, new Concat),
25+
static fn($assert, $property) => $property->ensureHeldBy($assert, Concat::monoid),
2626
);
2727
}
2828
};

proofs/sequence.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ static function($assert, $string, $chunk) {
9696
$string,
9797
$chunks
9898
->flatMap(static fn($chars) => $chars)
99-
->fold(new Concat)
99+
->fold(Concat::monoid)
100100
->toString(),
101101
);
102102
},

src/Monoid/Append.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
* @psalm-immutable
1414
* @implements Monoid<Sequence<T>>
1515
*/
16-
final class Append implements Monoid
16+
enum Append implements Monoid
1717
{
18+
case monoid;
19+
1820
/**
1921
* @template C of object
2022
*
@@ -26,7 +28,7 @@ final class Append implements Monoid
2628
public static function of(?string $class = null): self
2729
{
2830
/** @var self<C> */
29-
return new self;
31+
return self::monoid;
3032
}
3133

3234
#[\Override]

src/Monoid/ArrayMerge.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
* @psalm-immutable
1212
* @implements Monoid<array<T, U>>
1313
*/
14-
final class ArrayMerge implements Monoid
14+
enum ArrayMerge implements Monoid
1515
{
16+
case monoid;
17+
1618
#[\Override]
1719
public function identity(): mixed
1820
{

src/Monoid/Concat.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
* @psalm-immutable
1313
* @implements Monoid<Str>
1414
*/
15-
final class Concat implements Monoid
15+
enum Concat implements Monoid
1616
{
17+
case monoid;
18+
1719
#[\Override]
1820
public function identity(): Str
1921
{

src/Monoid/MergeMap.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
* @psalm-immutable
1515
* @implements Monoid<Map<T, U>>
1616
*/
17-
final class MergeMap implements Monoid
17+
enum MergeMap implements Monoid
1818
{
19+
case monoid;
20+
1921
/**
2022
* @template A of object
2123
* @template B of object
@@ -29,7 +31,7 @@ final class MergeMap implements Monoid
2931
public static function of(?string $key = null, ?string $value = null): self
3032
{
3133
/** @var self<A, B> */
32-
return new self;
34+
return self::monoid;
3335
}
3436

3537
#[\Override]

src/Monoid/MergeSet.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
* @psalm-immutable
1414
* @implements Monoid<Set<T>>
1515
*/
16-
final class MergeSet implements Monoid
16+
enum MergeSet implements Monoid
1717
{
18+
case monoid;
19+
1820
/**
1921
* @template C of object
2022
*
@@ -26,7 +28,7 @@ final class MergeSet implements Monoid
2628
public static function of(?string $class = null): self
2729
{
2830
/** @var self<C> */
29-
return new self;
31+
return self::monoid;
3032
}
3133

3234
#[\Override]

0 commit comments

Comments
 (0)