@@ -1,5 +1,5 @@
1{-# LANGUAGE TypeFamilies #-}
1{-# LANGUAGE TypeFamilies #-}
2−{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE MultiParamTypeClasses #-}
4Module : Data.Syntax.Char
4Module : Data.Syntax.Char
5Description : Char specific combinators.
5Description : Char specific combinators.
@@ -14,7 +14,7 @@ Common combinators that work with sequences of chars.
14There are A LOT of combinators missing.
14There are A LOT of combinators missing.
16module Data.Syntax.Char (
16module Data.Syntax.Char (
17− SyntaxChar,
17+ SyntaxChar(..),
@@ -26,12 +26,23 @@ import Control.Lens.SemiIso
26import Data.Char
26import Data.Char
27import Data.MonoTraversable
27import Data.MonoTraversable
28import Data.Monoid
28import Data.Monoid
29+import Data.Scientific (Scientific)
29import Data.SemiIsoFunctor
30import Data.SemiIsoFunctor
30import Data.Syntax (Syntax)
31import Data.Syntax (Syntax)
31import qualified Data.Syntax as S
32import qualified Data.Syntax as S
33-- | Syntax constrainted to sequences of chars.
34-- | Syntax constrainted to sequences of chars.
36+-- Note: methods of this class do not have default implementations (for now),
37+-- because their code is quite ugly and already written in most parser libraries.
34−type SyntaxChar syn seq = (Syntax syn seq, Element seq ~ Char)
38+class (Syntax syn seq, Element seq ~ Char) => SyntaxChar syn seq where
39+ -- | An unsigned decimal number.
40+ decimal :: Integral a => syn a
42+ -- | A scientific number.
43+ scientific :: syn Scientific
45+ {-# MINIMAL decimal, scientific #-}
36-- | Accepts zero or more spaces. Generates a single space.
47-- | Accepts zero or more spaces. Generates a single space.
37spaces :: SyntaxChar syn seq => syn ()
48spaces :: SyntaxChar syn seq => syn ()