From f17896d17ee32c4cc933965fbe6017c64918236a Mon Sep 17 00:00:00 2001 From: Phil Freeman Date: Sun, 24 Aug 2014 18:48:26 -0700 Subject: [PATCH] Fix #403 --- examples/passing/NegativeBinder.purs | 7 +++++++ src/Language/PureScript/Parser/Declarations.hs | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 examples/passing/NegativeBinder.purs diff --git a/examples/passing/NegativeBinder.purs b/examples/passing/NegativeBinder.purs new file mode 100644 index 0000000000..d5dfe1bad9 --- /dev/null +++ b/examples/passing/NegativeBinder.purs @@ -0,0 +1,7 @@ +module Main where + +test :: Number -> Boolean +test -1 = false +test _ = true + +main = Debug.Trace.trace "Done" diff --git a/src/Language/PureScript/Parser/Declarations.hs b/src/Language/PureScript/Parser/Declarations.hs index 9c79a55b09..d226961e96 100644 --- a/src/Language/PureScript/Parser/Declarations.hs +++ b/src/Language/PureScript/Parser/Declarations.hs @@ -24,7 +24,9 @@ module Language.PureScript.Parser.Declarations ( ) where import Data.Maybe (isJust, fromMaybe) + import Control.Applicative +import Control.Arrow ((+++)) import Language.PureScript.Parser.State import Language.PureScript.Parser.Common @@ -365,7 +367,12 @@ parseBooleanBinder :: P.Parsec String ParseState Binder parseBooleanBinder = BooleanBinder <$> booleanLiteral parseNumberBinder :: P.Parsec String ParseState Binder -parseNumberBinder = NumberBinder <$> C.integerOrFloat +parseNumberBinder = NumberBinder <$> (C.lexeme sign <*> C.integerOrFloat) + where + sign :: P.Parsec String ParseState (Either Integer Double -> Either Integer Double) + sign = (P.char '-' >> return (negate +++ negate)) + <|> (P.char '+' >> return id) + <|> return id parseVarBinder :: P.Parsec String ParseState Binder parseVarBinder = VarBinder <$> C.parseIdent