Skip to content

airportyh/protomorphism

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

protomorphism

Polymorphism via Clojure-style protocols.

Install

npm install protomorphism

Example

const protocol = require('protomorphism')

// create a new protocol `Pattern`, which requires a
// `matches` function to be implemented
const Pattern = protocol({
  matches: function(pattern, string){
    // returns true if string matches pattern
  }
})

// Make all strings implement pattern by exact matching
Pattern.implementation(String, {
  matches: function(pattern, string){
    return pattern === string
  }
})

// Make all arrays implement pattern by reporting a match
// when the array contains the target string
Pattern.implementation(Array, {
  matches: function(arr, string){
    return arr.indexOf(string) !== -1
  }
})

// Make all regular expressions implement pattern
Pattern.implementation(RegExp, {
  matches: function(regexp, string){
    return !!regexp.test(string)
  }
})

// `Pattern.matches` is the polymorphic
// `matches` function which you can use on
// any object who implements `Pattern`.
const matches = Pattern.matches
const patterns = [
  'README.md',
  'README',
  ['README.md', 'readme.md'],
  /README\.(md|rdoc|txt)/i
]

let matched = patterns.some(function(pattern){
  return matches(pattern, input)
})

About

Polymorphism via clojure-style protocols.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published