Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 183x 17x | // @flow
import P from 'parsimmon'
import crap from './crap'
import TupleParser from './collections/tuple'
import IdentifierParser from './identifier'
import type { LambdaNodeValueType, NodeType, VariableNodeType } from '../types'
export default P.alt(
P.seq(
P.string('$')
.then(IdentifierParser.atMost(1))
.skip(crap)
.skip(P.string('=>')),
crap.then(TupleParser)
).map(
([variable, definition]: [
Array<VariableNodeType>,
NodeType
]): LambdaNodeValueType => ({
variable: variable.length ? variable[0].value : 'input',
definition
})
),
P.string('\\')
.then(crap)
.then(TupleParser)
.map((definition: NodeType): LambdaNodeValueType => ({
variable: 'input',
definition
}))
)
.trim(crap)
.node('lambda')
.desc('lambda')
|