on master help sign in
Add SyntaxChar typeclass and decimal, scientific functions.
262260ePaweł Nowak
Data/Syntax.hs+1−1
@@ -79,7 +79,7 @@ class ( SemiIsoAlternative syn
79 , Eq (Element seq))
79 , Eq (Element seq))
80 => Syntax syn seq | syn -> seq
80 => Syntax syn seq | syn -> seq
81 where
81 where
82−
82+
83 -- | Any character.
83 -- | Any character.
84 anyChar :: syn (Element seq)
84 anyChar :: syn (Element seq)
85
85
Data/Syntax/Char.hs+14−3
@@ -1,5 +1,5 @@
1{-# LANGUAGE TypeFamilies #-}
1{-# LANGUAGE TypeFamilies #-}
2−{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE MultiParamTypeClasses #-}
3{- |
3{- |
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.
15-}
15-}
16module Data.Syntax.Char (
16module Data.Syntax.Char (
17− SyntaxChar,
17+ SyntaxChar(..),
18 spaces,
18 spaces,
19 spaces_,
19 spaces_,
20 spaces1,
20 spaces1,
@@ -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
32
33
33-- | Syntax constrainted to sequences of chars.
34-- | Syntax constrainted to sequences of chars.
35+--
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
41+
42+ -- | A scientific number.
43+ scientific :: syn Scientific
44+
45+ {-# MINIMAL decimal, scientific #-}
35
46
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 ()
syntax.cabal+2−2
@@ -1,5 +1,5 @@
1name: syntax
1name: syntax
2−version: 0.1.1.0
2+version: 0.2.0.0
3synopsis: Abstract syntax descriptions for parsing and pretty-printing.
3synopsis: Abstract syntax descriptions for parsing and pretty-printing.
4description: Abstract syntax descriptions for parsing and pretty-printing.
4description: Abstract syntax descriptions for parsing and pretty-printing.
5 Write a single syntax description, get both a parser and a pretty-printer.
5 Write a single syntax description, get both a parser and a pretty-printer.
@@ -27,5 +27,5 @@ library
27 exposed-modules: Data.Syntax
27 exposed-modules: Data.Syntax
28 Data.Syntax.Char
28 Data.Syntax.Char
29 Data.Syntax.Combinator
29 Data.Syntax.Combinator
30− build-depends: base >= 4 && < 5, mono-traversable, lens, semi-iso
30+ build-depends: base >= 4 && < 5, mono-traversable, lens >= 4, semi-iso >= 0.3, scientific >= 0.3
31 default-language: Haskell2010
31 default-language: Haskell2010