@@ -18,18 +18,16 @@ module Data.Syntax.Char (
25−import Control.Lens.SemiIso
24+import Control.Lens.SemiIso
26−import Data.Char
25+import Data.Char
27−import Data.MonoTraversable
26+import Data.MonoTraversable
29−import Data.Scientific (Scientific)
27+import Data.Scientific (Scientific)
30−import Data.SemiIsoFunctor
28+import Data.SemiIsoFunctor
31−import Data.Syntax (Syntax)
29+import Data.Syntax
32−import qualified Data.Syntax as S
30+import Data.Syntax.Combinator
34-- | Syntax constrainted to sequences of chars.
32-- | Syntax constrainted to sequences of chars.
@@ -45,23 +43,22 @@ class (Syntax syn seq, Element seq ~ Char) => SyntaxChar syn seq where
45 {-# MINIMAL decimal, scientific #-}
43 {-# MINIMAL decimal, scientific #-}
47-- | A number with an optional leading '+' or '-' sign character.
45-- | A number with an optional leading '+' or '-' sign character.
48−signed :: (Num a, SyntaxChar syn seq) => syn a -> syn a
46+signed :: (Real a, SyntaxChar syn seq) => syn a -> syn a
49−signed n = _Negative /$/ S.char '-' */ n
47+signed n = _Negative /$/ char '-' */ n
50− /|/ S.char '+' */ n
48+ /|/ opt_ (char '+') */ n
53-- | Accepts zero or more spaces. Generates a single space.
50-- | Accepts zero or more spaces. Generates a single space.
54spaces :: SyntaxChar syn seq => syn ()
51spaces :: SyntaxChar syn seq => syn ()
55−spaces = constant (opoint ' ') /$/ S.takeWhile isSpace
52+spaces = opt spaces1
57-- | Accepts zero or more spaces. Generates no output.
54-- | Accepts zero or more spaces. Generates no output.
58spaces_ :: SyntaxChar syn seq => syn ()
55spaces_ :: SyntaxChar syn seq => syn ()
59−spaces_ = constant mempty /$/ S.takeWhile isSpace
56+spaces_ = opt_ spaces1
61-- | Accepts one or more spaces. Generates a single space.
58-- | Accepts one or more spaces. Generates a single space.
62spaces1 :: SyntaxChar syn seq => syn ()
59spaces1 :: SyntaxChar syn seq => syn ()
63−spaces1 = constant (opoint ' ') /$/ S.takeWhile1 isSpace
60+spaces1 = constant (opoint ' ') /$/ takeWhile1 isSpace
65-- | Accepts a single newline. Generates a newline.
62-- | Accepts a single newline. Generates a newline.
66endOfLine :: SyntaxChar syn seq => syn ()
63endOfLine :: SyntaxChar syn seq => syn ()
67−endOfLine = S.char '\n'
64+endOfLine = char '\n'