public function ap(FantasyLand\Apply $applicative) { return $this->reduce(function ($accumulator, $value) use($applicative) { /** @var $applicative self */ return f\concatM($accumulator, $applicative->map($value)); }, self::mempty()); }