From ef66c45982199168ac45a648790a1a9b43b20802 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Thu, 27 Jun 2013 23:48:43 -0400 Subject: [PATCH] On second thought... Make [,,,] unpack to cons/2 and nil/1 as per timv's request. --- src/Dyna/ParserHS/Parser.hs | 11 +++++++++-- src/Dyna/ParserHS/Selftest.hs | 16 ++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Dyna/ParserHS/Parser.hs b/src/Dyna/ParserHS/Parser.hs index 9b18891..bd82186 100644 --- a/src/Dyna/ParserHS/Parser.hs +++ b/src/Dyna/ParserHS/Parser.hs @@ -326,14 +326,21 @@ term = token $ choice <* (notFollowedBy $ char '(') , try $ nullaryStar - , spanned $ nakedbrak + , nakedbrak , spanned $ parenfunc ] where parenfunc = TFunctor <$> parseFunctor <*> parens (tlexpr `sepBy` symbolic ',') - nakedbrak = TFunctor "tuple" <$> brackets (tlexpr `sepBy` symbolic ',') + nakedbrak = listify <$> spanned (brackets (tlexpr `sepBy` symbolic ',')) + where + listify (xs :~ s) = + let (xs' :~ s') = foldr (\a@(_ :~ sa) b@(_ :~ sb) -> TFunctor "cons" [a,b] :~ (sa <> sb)) + (TFunctor "nil" [] :~ r s) + xs + in (xs' :~ (s <> s')) + r (Span _ e b) = Span e e b mkta ty te = TAnnot (AnnType ty) te diff --git a/src/Dyna/ParserHS/Selftest.hs b/src/Dyna/ParserHS/Selftest.hs index 86d346d..6046736 100644 --- a/src/Dyna/ParserHS/Selftest.hs +++ b/src/Dyna/ParserHS/Selftest.hs @@ -158,13 +158,17 @@ case_colonFunctor = e @=? (term pvv) case_bracketTuple :: Assertion case_bracketTuple = e @=? (term s) where - e = TFunctor "tuple" + e = TFunctor "cons" [ _tNumeric (Left 1) :~ Span (Columns 1 1) (Columns 2 2) s - , TFunctor "+" - [ _tNumeric (Left 2) :~ Span (Columns 3 3) (Columns 4 4) s - , _tNumeric (Left 3) :~ Span (Columns 5 5) (Columns 6 6) s - ] - :~ Span (Columns 3 3) (Columns 6 6) s + , TFunctor "cons" + [ TFunctor "+" + [ _tNumeric (Left 2) :~ Span (Columns 3 3) (Columns 4 4) s + , _tNumeric (Left 3) :~ Span (Columns 5 5) (Columns 6 6) s + ] + :~ Span (Columns 3 3) (Columns 6 6) s + , TFunctor "nil" [] :~ Span (Columns 7 7) (Columns 7 7) s + ] + :~ Span (Columns 3 3) (Columns 7 7) s ] :~ Span (Columns 0 0) (Columns 7 7) s s = "[1,2+3]" -- 2.50.1