on master help sign in
Arbitrary length tuples (reducing to nested pairs)
2000a54Edwin Brady
src/Idris/Parser.hs+10
@@ -553,12 +553,22 @@ pPair syn = try (do lchar '('; l <- pExpr syn; op <- pairOp
553 fc <- pfc
553 fc <- pfc
554 r <- pExpr syn; lchar ')';
554 r <- pExpr syn; lchar ')';
555 return (op fc l r))
555 return (op fc l r))
556+ <|> try (do lchar '('; x <- ntuple
557+ lchar ')'
558+ return x)
556 <|> do lchar '('; ln <- pName; lchar ':'; lty <- pExpr syn;
559 <|> do lchar '('; ln <- pName; lchar ':'; lty <- pExpr syn;
557 reservedOp "**";
560 reservedOp "**";
558 fc <- pfc
561 fc <- pfc
559 r <- pExpr syn; lchar ')';
562 r <- pExpr syn; lchar ')';
560 return (PDPair fc (PRef fc ln) lty r)
563 return (PDPair fc (PRef fc ln) lty r)
561 where
564 where
565+ ntuple = try (do l <- pExpr syn; fc <- pfc; lchar ','
566+ rest <- ntuple
567+ return (PPair fc l rest))
568+ <|> (do l <- pExpr syn; fc <- pfc; lchar ','
569+ r <- pExpr syn
570+ return (PPair fc l r))
571+
562 pairOp = do lchar ','; return PPair
572 pairOp = do lchar ','; return PPair
563 <|> do reservedOp "**"; return (\f x y -> PDPair f x Placeholder y)
573 <|> do reservedOp "**"; return (\f x y -> PDPair f x Placeholder y)
564
574