aiken-lang 1.1.23

Cardano smart contract language and toolchain
Documentation
use crate::{
    ast::{UntypedPattern, well_known},
    parser::{error::ParseError, token::Token},
};
use chumsky::prelude::*;

pub fn parser(
    pattern: Recursive<'_, Token, UntypedPattern, ParseError>,
) -> impl Parser<Token, UntypedPattern, Error = ParseError> + '_ {
    select! {Token::UpName { name } if name == well_known::PAIR => name}
        .ignore_then(choice((
            just(Token::LeftParen),
            just(Token::NewLineLeftParen),
        )))
        .then(pattern.clone())
        .then_ignore(just(Token::Comma))
        .then(pattern.clone())
        .then_ignore(just(Token::RightParen))
        .map_with_span(|((_name, fst), snd), location| UntypedPattern::Pair {
            fst: Box::new(fst),
            snd: Box::new(snd),
            location,
        })
}