on master help sign in
Reversed 'exact', added 'SyntaxChar'.
9e6fa12Paweł Nowak
Data/Syntax.hs+2−2
@@ -54,7 +54,7 @@ class ( SemiIsoAlternative syn
54
54
55 -- | A specific character.
55 -- | A specific character.
56 char :: Element seq -> syn ()
56 char :: Element seq -> syn ()
57− char c = exact c /$/ anyChar
57+ char c = rev (exact c) /$/ anyChar
58
58
59 -- | Any character except the given one.
59 -- | Any character except the given one.
60 notChar :: Element seq -> syn (Element seq)
60 notChar :: Element seq -> syn (Element seq)
@@ -71,7 +71,7 @@ class ( SemiIsoAlternative syn
71
71
72 -- | A specific string.
72 -- | A specific string.
73 string :: seq -> syn ()
73 string :: seq -> syn ()
74− string s = exact s /$/ take (olength s)
74+ string s = rev (exact s) /$/ take (olength s)
75
75
76 -- | A string of length @n@.
76 -- | A string of length @n@.
77 take :: Int -> syn seq
77 take :: Int -> syn seq
Data/Syntax/Char.hs+6
@@ -1,4 +1,5 @@
1{-# LANGUAGE TypeFamilies #-}
1{-# LANGUAGE TypeFamilies #-}
2+{-# LANGUAGE ConstraintKinds #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE MultiParamTypeClasses #-}
3{- |
4{- |
4Module : Data.Syntax.Char
5Module : Data.Syntax.Char
@@ -14,6 +15,7 @@ Common combinators that work with sequences of chars.
14-}
15-}
15module Data.Syntax.Char (
16module Data.Syntax.Char (
16 SyntaxChar(..),
17 SyntaxChar(..),
18+ SyntaxText,
17 signed,
19 signed,
18 spaces,
20 spaces,
19 spaces_,
21 spaces_,
@@ -28,6 +30,7 @@ import Data.Scientific (Scientific)
28import Data.SemiIsoFunctor
30import Data.SemiIsoFunctor
29import Data.Syntax
31import Data.Syntax
30import Data.Syntax.Combinator
32import Data.Syntax.Combinator
33+import Data.Text (Text)
31
34
32-- | Syntax constrainted to sequences of chars.
35-- | Syntax constrainted to sequences of chars.
33--
36--
@@ -42,6 +45,9 @@ class (Syntax syn seq, Element seq ~ Char) => SyntaxChar syn seq where
42
45
43 {-# MINIMAL decimal, scientific #-}
46 {-# MINIMAL decimal, scientific #-}
44
47
48+-- | An useful synonym for SyntaxChars with Text sequences.
49+type SyntaxText syn = SyntaxChar syn Text
50+
45-- | A number with an optional leading '+' or '-' sign character.
51-- | A number with an optional leading '+' or '-' sign character.
46signed :: (Real a, SyntaxChar syn seq) => syn a -> syn a
52signed :: (Real a, SyntaxChar syn seq) => syn a -> syn a
47signed n = _Negative /$/ char '-' */ n
53signed n = _Negative /$/ char '-' */ n
syntax.cabal+3−2
@@ -1,5 +1,5 @@
1name: syntax
1name: syntax
2−version: 0.2.1.0
2+version: 0.3.0.0
3synopsis: Syntax descriptions for unified parsing and pretty-printing.
3synopsis: Syntax descriptions for unified parsing and pretty-printing.
4description:
4description:
5 'syntax' allows you to write a single syntax description and instantiate is both as a parser and a pretty printer.
5 'syntax' allows you to write a single syntax description and instantiate is both as a parser and a pretty printer.
@@ -43,5 +43,6 @@ library
43 exposed-modules: Data.Syntax
43 exposed-modules: Data.Syntax
44 Data.Syntax.Char
44 Data.Syntax.Char
45 Data.Syntax.Combinator
45 Data.Syntax.Combinator
46+ Data.Syntax.Indent
46− build-depends: base >= 4 && < 5, mono-traversable, lens >= 4, semi-iso >= 0.4.1, scientific >= 0.3
47+ build-depends: base >= 4 && < 5, mono-traversable, lens >= 4, semi-iso >= 0.5.0, scientific >= 0.3, text
47 default-language: Haskell2010
48 default-language: Haskell2010