Functional Programming in PHP Errata
This page lists Errata discovered in the Functional Programming in PHP book. The page numbers given refer to the printed book and PDF copies of the book.
If you've found an issue in the book please email book@functionalphp.com.
Page 24
tail_sum()
tail_sum()
should have $running_total
set to 1 by default instead of 0.
Page 86
$x
has incorrect return type
$x
should return a type of Only
and not an integer as defined in the book. So $x
should be:
$x = function($value) { return Only::pack($value + 2); };
Therefore the return types of $a
and $b
(declared in the same code block as the definition of $x
in the book) now need to be updated to match as well.
$a = Only::pack(2)->map($x); // Only(4) $b = $x(2); // Only(4)
Note the changes to the comments so that it now indicates a return value of Only(4)
.
$y
definition missing
The definition of $y
was missing from the book and should be:
$y = function($value) { return Only::pack($value * 5); };
With this in place the third law is now provable.
Page 88
Maybe
monad shouldn't overload map()
Firstly, map()
should be defined as:
public function map($function) { return $function($this->container); }
Then we need to add another method to the class to allow for the additional functionality.
public function mapAndPack($function) { return $this->isNothing() ? $this : static::pack($this->map($function)); }
Finally this means that the call applying $verify_names
must also be amended on the base of page 88.
$sth = $pdo->prepare("SELECT * FROM umuntu"); $sth->execute(); $row = $sth->fetch(PDO::FETCH_LAZY); $verify_names = function($value) { return $value->ibizo . ' (verified)'; }; echo 'Name: ' . Maybe::pack($row)-> mapAndPack($verify_names)-> getOrElse('Unknown');
Thanks
A big thank you to those that have helped to compile this list of errata: