@@ -18,18 +18,16 @@ module Data.Syntax.Char (
1818 spaces,
1919 spaces_,
2020 spaces1,
21− spaces1_,
2221 endOfLine
2322 ) where
2423
25−import Control.Lens.SemiIso
26−import Data.Char
27−import Data.MonoTraversable
28−import Data.Monoid
29−import Data.Scientific (Scientific)
30−import Data.SemiIsoFunctor
31−import Data.Syntax (Syntax)
32−import qualified Data.Syntax as S
24+import Control.Lens.SemiIso
25+import Data.Char
26+import Data.MonoTraversable
27+import Data.Scientific (Scientific)
28+import Data.SemiIsoFunctor
29+import Data.Syntax
30+import Data.Syntax.Combinator
3331
3432-- | Syntax constrainted to sequences of chars.
3533--
@@ -45,23 +43,22 @@ class (Syntax syn seq, Element seq ~ Char) => SyntaxChar syn seq where
4543 {-# MINIMAL decimal, scientific #-}
4644
4745-- | A number with an optional leading '+' or '-' sign character.
48−signed :: (Num a, SyntaxChar syn seq) => syn a -> syn a
49−signed n = _Negative /$/ S.char '-' */ n
50− /|/ S.char '+' */ n
51− /|/ n
46+signed :: (Real a, SyntaxChar syn seq) => syn a -> syn a
47+signed n = _Negative /$/ char '-' */ n
48+ /|/ opt_ (char '+') */ n
5249
5350-- | Accepts zero or more spaces. Generates a single space.
5451spaces :: SyntaxChar syn seq => syn ()
55−spaces = constant (opoint ' ') /$/ S.takeWhile isSpace
52+spaces = opt spaces1
5653
5754-- | Accepts zero or more spaces. Generates no output.
5855spaces_ :: SyntaxChar syn seq => syn ()
59−spaces_ = constant mempty /$/ S.takeWhile isSpace
56+spaces_ = opt_ spaces1
6057
6158-- | Accepts one or more spaces. Generates a single space.
6259spaces1 :: SyntaxChar syn seq => syn ()
63−spaces1 = constant (opoint ' ') /$/ S.takeWhile1 isSpace
60+spaces1 = constant (opoint ' ') /$/ takeWhile1 isSpace
6461
6562-- | Accepts a single newline. Generates a newline.
6663endOfLine :: SyntaxChar syn seq => syn ()
67−endOfLine = S.char '\n'
64+endOfLine = char '\n'