2017 © Pedro Peláez
 

library either

image

mareg/either

  • Wednesday, March 1, 2017
  • by mareg
  • Repository
  • 1 Watchers
  • 0 Stars
  • 280 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 4 Versions
  • 24 % Grown

The README.md

Either

Build Status, (*1)

A strongly typed composable alternative to exceptions and functions that return error codes or sane values., (*2)

The convention is that Left is representative of an error value and Right is representative of a success value., (*3)

<?php
use PlasmaConduit\either\Left;
use PlasmaConduit\either\Right;
use PlasmaConduit\option\Some;
use PlasmaConduit\option\None;

function loadNews() {
    $connection = PsuedoDB::connect();
    if (!$connection) {
        return new Left("Failed connection to DB");
    }

    $news = $connection->get("latestNews");
    if ($news) {
        return new Right($news);
    } else {
        return new Left("Failed reading latest news");
    }
}

$news = loadNews()->fold(
    function($failMessage) {
        PsudeoLogger::log($failMessage);
        return new None();
    },
    function($news) {
        return new Some($news);
    }
)->getOrElse("No news at the moment, please check back later.");

Documentation

This library implements a classes Left and Right and they both implement the Either interface. The Either interface is as follows:, (*4)

<?php
namespace PlasmaConduit\either;

interface Either {

    /**
     * Returns true if this `Either` type is `Left`, false otherwise
     *
     * @return {Boolean}
     */
    public function isLeft();

    /**
     * Returns true if this `Either` type is `Right`, false otherwise
     *
     * @return {Boolean}
     */
    public function isRight();

    /**
     * This function takes two callable types as it's arguments and it will
     * only call one of them. If this `Either` type is `Left` it calls
     * `$leftCase` with the left value. If this is the `Right` type it calls
     * the `$rightCase` with the right value.
     *
     * @param {callable} $leftCase  - Callable for left case
     * @param {callable} $rightCase - Callable for right case
     * @return {Any}                - Whatever the ran case returns
     */
    public function fold($leftCase, $rightCase);

    /**
     * Returns an `Option` projection of the `Left` value of this `Either` type.
     * So if this is type `Left` it returns `Some($value)` but if this is
     * `Right` it returns `None`
     *
     * @return {PlasmaConduit\option\Option}
     */
    public function left();

    /**
     * Returns an `Option` projection of the `Right` value of this `Either`
     * type. So if this is type `Right` it returns `Some($value)` but if this is
     * `Left` it returns `None`
     *
     * @return {PlasmaConduit\option\Option}
     */
    public function right();

    /**
     * Returns the `Either` type as the opposite side. `Left` returns `Right`
     * and vice versa.
     *
     * @return {Either}
     */
    public function swap();

}

The Versions

01/03 2017

dev-master

9999999-dev

  Sources   Download

The Requires

 

The Development Requires

01/03 2017

0.2.4

0.2.4.0

  Sources   Download

The Requires

 

The Development Requires

01/03 2017

0.2.3

0.2.3.0

  Sources   Download

The Requires

 

The Development Requires

01/03 2017

0.2.2

0.2.2.0

  Sources   Download

The Requires

 

The Development Requires