on master help sign in
Arbitrary length tuples (reducing to nested pairs)
commit2000a54b8948dd648b8289acdf25a3fd1b13df3f authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateSat 31 Dec 2011, 15:13 (15 years ago) parentd22364a
1 file changed+10
src/Idris/Parser.hs+10
src/Idris/Parser.hs+10
@@ -553,12 +553,22 @@ pPair syn = try (do lchar '('; l <- pExpr syn; op <- pairOp
553553 fc <- pfc
554554 r <- pExpr syn; lchar ')';
555555 return (op fc l r))
556+ <|> try (do lchar '('; x <- ntuple
557+ lchar ')'
558+ return x)
556559 <|> do lchar '('; ln <- pName; lchar ':'; lty <- pExpr syn;
557560 reservedOp "**";
558561 fc <- pfc
559562 r <- pExpr syn; lchar ')';
560563 return (PDPair fc (PRef fc ln) lty r)
561564 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+
562572 pairOp = do lchar ','; return PPair
563573 <|> do reservedOp "**"; return (\f x y -> PDPair f x Placeholder y)
564574