on master help sign in
Add SyntaxChar typeclass and decimal, scientific functions.
commit262260e66431562135d136f0dc476b23f0b7dce9 authorPaweł Nowak <pawel834@gmail.com> dateWed 12 Nov 2014, 22:51 (12 years ago) parentd537ee1
3 files changed+17−6
Data/Syntax.hs+1−1 Data/Syntax/Char.hs+14−3 syntax.cabal+2−2
Data/Syntax.hs+1−1
@@ -79,7 +79,7 @@ class ( SemiIsoAlternative syn
7979 , Eq (Element seq))
8080 => Syntax syn seq | syn -> seq
8181 where
82−
82+
8383 -- | Any character.
8484 anyChar :: syn (Element seq)
8585
Data/Syntax/Char.hs+14−3
@@ -1,5 +1,5 @@
11{-# LANGUAGE TypeFamilies #-}
2−{-# LANGUAGE ConstraintKinds #-}
2+{-# LANGUAGE MultiParamTypeClasses #-}
33{- |
44Module : Data.Syntax.Char
55Description : Char specific combinators.
@@ -14,7 +14,7 @@ Common combinators that work with sequences of chars.
1414There are A LOT of combinators missing.
1515-}
1616module Data.Syntax.Char (
17− SyntaxChar,
17+ SyntaxChar(..),
1818 spaces,
1919 spaces_,
2020 spaces1,
@@ -26,12 +26,23 @@ import Control.Lens.SemiIso
2626import Data.Char
2727import Data.MonoTraversable
2828import Data.Monoid
29+import Data.Scientific (Scientific)
2930import Data.SemiIsoFunctor
3031import Data.Syntax (Syntax)
3132import qualified Data.Syntax as S
3233
3334-- | Syntax constrainted to sequences of chars.
34−type SyntaxChar syn seq = (Syntax syn seq, Element seq ~ Char)
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.
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 #-}
3546
3647-- | Accepts zero or more spaces. Generates a single space.
3748spaces :: SyntaxChar syn seq => syn ()
syntax.cabal+2−2
@@ -1,5 +1,5 @@
11name: syntax
2−version: 0.1.1.0
2+version: 0.2.0.0
33synopsis: Abstract syntax descriptions for parsing and pretty-printing.
44description: Abstract syntax descriptions for parsing and pretty-printing.
55 Write a single syntax description, get both a parser and a pretty-printer.
@@ -27,5 +27,5 @@ library
2727 exposed-modules: Data.Syntax
2828 Data.Syntax.Char
2929 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
3131 default-language: Haskell2010