Skip to content

Instantly share code, notes, and snippets.

@igorw
Created October 24, 2014 19:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save igorw/b0a213dfb9247048a09a to your computer and use it in GitHub Desktop.
Save igorw/b0a213dfb9247048a09a to your computer and use it in GitHub Desktop.
The Past Monad
<?php
namespace igorw;
class Past {
private $value;
private $pastValues;
function __construct($value, array $pastValues = []) {
$this->value = $value;
$this->pastValues = $pastValues;
}
function map(callable $fn) {
return $this->update($fn($this->value));
}
function update($value) {
return new Past($value, array_merge($this->pastValues, [$this->value]));
}
function get() {
return array_rand($this->pastValues);
}
}
$answer = new Past(42);
$answer = $answer->map(function ($number) { return $number + 1; });
$answer = $answer->update(-3);
$answer = $answer->map(function ($number) { return $number * -1; });
$answer = $answer->map(function ($number) { return $number * 3; });
$answer = $answer->update('completely new value, hehehe');
var_dump($answer->get());
@ircmaxell
Copy link

Temporal paradoxes be dammed!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment