Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

maccha

Pattern matching for js

About name

maccha - fine powder tea. As in case of tea, you could make the pattern fine powder for matching. Also "maccha" (matcha) sounds similarly with "matching"

Short description

Matchable value could be:

  • primitive or wrapper object of primitive
  • array ([1,2,3] or new Array(1,2,3))
  • struct ({a:1, b:2, c:"3"})
  • instance of user class
  • composition entity of last three cases

match takes matchable value and returns a function which takes a sequence of ca$e's.

Each of ca$e takes the pattern as first argument and rest sequence of arguments are guards (additional predicates of matchable value). ca$e returns a function which takes a callback function - it be execute if matching would be successful. ca$e matching execute one by one up to down.

el$e - just default action if none of ca$e's will be successful. If el$e is absent and there is no any successful matching it throws Error.

ANY is just a constant a-la wildcart.

TAIL is another constant. It uses for tail of array for pattern.

Example

match({x:1,y: {z: 2}})(ca$e({x:1,y:2,z: ANY},(obj=>obj.z>10))(obj=>"struct with x, y, z and z is more than 10"),ca$e([1,2,TAIL])(arr=>"1,2,.... and something else"),ca$e({x:1,y: {z: 2}})(obj=>"It's very complex object"),el$e(any=>`It something different`))// "It's very complex object"

About

Pattern matching for js

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages