Pattern-guard is a small module that brings you the Haskell guards syntax in JavaScript.
const guards = require('pattern-guard')
const [a, b, c] = [1, 3, 7]
const result = guards({ a, b, c })`
| a > b = 1337
| b > c = 999
| c > a = 42
| c > b = 11
`
console.log(result) // 42
Please note that, like in Haskell, the first truthy guard will be returned.
Guards can also be inlined:
guards({ a, b, c })`a < b = 'yep' | b > c = 'nope' | c > a = 'maybe'`
And they support all comparison operators < <= == === !== != >= >
and the logical operators too && || !
.
In Haskell, the otherwise
keyword is used as a catch-all. To avoid using this keyword as variable name, this logic is not implemented in the module, you can simply emulate the same behaviour by using true
:
const [a, b, c] = [1, 2, 3]
const result = guards({ a, b, c })`
| a > b = 'nope'
| b > c = 'nope'
| c < a = 'nope'
| true = 'yep'
`
console.log(result) // 'yep'
The code quality is checked by the JavaScript Standard Style.
Released under the MIT license by Davy Duperron.