2017 © Pedro Peláez
 

library cathacks

image

md/cathacks

  • Wednesday, June 15, 2016
  • by md
  • Repository
  • 1 Watchers
  • 4 Stars
  • 1 Installations
  • Hack
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 1 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

CatHacks

A library of functional structures in HackLang, (*1)

Options

$ hhvm -d hhvm.force_hh=true -a
hphpd> require_once "vendor/autoload.php"
hphpd> echo Some(1)
Some(1)
hphpd> echo None()
None
hphpd> echo Option(42)
Some(42)

Lists

hphpd> echo ImmList(2,3,4)
List(1,2,3)
hphpd> echo ImmList(Some(1), None(), Some(3))
List(Some(1),None,Some(3))

Functor

hphpd> echo Some(1)->map($x ==> $x + 1)
Some(2)
hphpd> echo None()->map($x ==> $x + 1)
None
hphpd> echo ImmList(1,2,3)->map($x ==> $x + 1)
List(2,3,4)

Applicative

hphpd> echo Some(1)->apply(Some($x ==> $x + 3))
Some(4)
hphpd> echo None()->apply(Some($x ==> $x + 1))
None
hphpd> echo Some(1)->map2(Some(2), ($x, $y) ==> $x + $y)
Some(3)
hphpd> echo None()->map2(Some(2), ($x, $y) ==> $x + $y)
None
hphpd> echo ImmList(1,2,3)->apply(Some($x ==> $x + 1))
List(2,3,4)
hphpd> echo ImmList(1,2,3)->map2(ImmList(4,5,6), ($x, $y) ==> $x + $y)
List(5,6,7,6,7,8,7,8,9)

Monad

hphpd> echo ImmList(1,2,3)->flatMap($x ==> Some($x + 1))
List(2,3,4)
hphpd> echo ImmList(1,2,3)->flatMap($x ==> $x % 2 === 0 ? None() : Some($x + 1))
List(2,4)
hphpd> echo ImmList(1,2,3)->flatMap($x ==> None())
List()
hphpd> echo ImmList(1,2,3)->flatMap($x ==> ImmList($x + 1, $x))
List(2,1,3,2,4,3)
hphpd> echo Some(1)->flatMap($x ==> Some($x + 1))
Some(2)
hphpd> echo Some(1)->flatMap($x ==> None())
None
hphpd> echo ImmList(1,2,3)->flatMap($x ==> ImmList(Some($x + 1)))
List(Some(2),Some(3),Some(4))
hphpd> echo Some(Some(Some(4)))->flatten()
Some(Some(4))
hphpd> echo ImmList(Some(Some(4)))->flatten()
List(Some(4))

The Versions

15/06 2016