packages feed

syntax-example 0.4.0.0 → 1.0.0.0

raw patch · 2 files changed

+25/−22 lines, 2 filesdep ~semi-isodep ~syntaxdep ~syntax-attoparsec

Dependency ranges changed: semi-iso, syntax, syntax-attoparsec, syntax-printer

Files

Main.hs view
@@ -1,19 +1,22 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-}  import           Control.Applicative+import           Control.Category.Structures import           Control.Lens.Cons import           Control.Lens.SemiIso import           Control.Lens.TH+import           Control.SIArrow import qualified Data.Attoparsec.Text.Lazy as AP import           Data.Char import           Data.Scientific (Scientific)-import           Data.SemiIsoFunctor-import           Data.Syntax (Syntax)+import           Data.Syntax (Seq) import qualified Data.Syntax as S import qualified Data.Syntax.Attoparsec.Text.Lazy as S-import           Data.Syntax.Char (SyntaxChar)+import           Data.Syntax.Char (SyntaxChar, SyntaxText) import qualified Data.Syntax.Char as S import qualified Data.Syntax.Combinator as S import qualified Data.Syntax.Printer.Text as S@@ -39,30 +42,30 @@ $(makePrisms ''AST)  -- | A variable name.-name :: Syntax syn Text => syn Text+name :: SyntaxText syn => syn () Text name = _Cons /$/ S.satisfy isAlpha /*/ S.takeWhile isAlphaNum  -- | A quoted string.-quoted :: SyntaxChar syn seq => syn seq+quoted :: SyntaxChar syn => syn () (Seq syn) quoted = S.char '"' */ S.takeTill (=='"') /* S.char '"'  -- | Encloses a symbol in parentheses.-parens :: SyntaxChar syn seq => syn a -> syn a+parens :: SyntaxChar syn => syn () a -> syn () a parens m = S.char '(' */ S.spaces_ */ m /* S.spaces_ /* S.char ')'  -- | A literal.-literal :: SyntaxChar syn Text => syn Literal+literal :: SyntaxText syn => syn () Literal literal =  _LitNum /$/ S.scientific-       /|/ _LitStr /$/ quoted+       /+/ _LitStr /$/ quoted  -- | An atom is a variable, literal or an expression in parentheses.-atom :: SyntaxChar syn Text => syn AST+atom :: SyntaxText syn => syn () AST atom =  _Lit /$/ literal-    /|/ _Var /$/ name-    /|/ parens expr+    /+/ _Var /$/ name+    /+/ parens expr  -- | Parses a list of atoms and folds them with the _App prism.-apps :: SyntaxChar syn Text => syn AST+apps :: SyntaxText syn => syn () AST apps = bifoldl1 _App /$/ S.sepBy1 atom S.spaces1  -- | An expression of our lambda calculus.@@ -70,20 +73,20 @@ -- Thanks to 'tuple-morph' we don't have to worry about /* and */ here. -- Tuples are reassociated and units are removed by the 'morphed' -- isomorphism (applied in /$~ operator).-expr :: SyntaxChar syn Text => syn AST+expr :: SyntaxText syn => syn () AST expr =  _Abs /$~ S.char '\\'    /*/ S.spaces_              /*/ name           /*/ S.spaces              /*/ S.string "->"  /*/ S.spaces              /*/ expr -    /|/ _Let /$~ S.string "let" /*/ S.spaces1+    /+/ _Let /$~ S.string "let" /*/ S.spaces1              /*/ name           /*/ S.spaces              /*/ S.char '='     /*/ S.spaces              /*/ expr           /*/ S.spaces1              /*/ S.string "in"  /*/ S.spaces1              /*/ expr -    /|/ apps+    /+/ apps  main :: IO () main = do@@ -91,7 +94,7 @@     t <- T.getContents      -- Try to parse it.-    case AP.parse (S.getParser expr <* AP.skipSpace <* AP.endOfInput) t of+    case AP.parse (S.getParser_ expr <* AP.skipSpace <* AP.endOfInput) t of       AP.Fail _ _ err  -> putStrLn err       AP.Done _ ast -> do           -- If parsing succeeded print the AST.@@ -99,7 +102,7 @@            -- Try to pretty print it.           -- (Printing cannot really fail in this example)-          case S.runPrinter expr ast of+          case S.runPrinter_ expr ast of             Left err  -> putStrLn err             Right bld -> T.putStrLn (T.toLazyText bld) 
syntax-example.cabal view
@@ -1,18 +1,18 @@ name:                syntax-example-version:             0.4.0.0+version:             1.0.0.0 synopsis:            Example application using syntax, a library for abstract syntax descriptions. description:   Example application using syntax, a library for abstract syntax descriptions.   .   The code:   .-  * <https://github.com/Pawel834/syntax-example/blob/master/Main.hs Main.hs>+  * <https://github.com/Pawel834/syntax-example/blob/83c283823749038db3d21aaf99105f456e25bac7/Main.hs Main.hs>   .   Example input:   .   > (\f->   > (\x-  >      -> f     ((x) x)) (\x +  >      -> f     ((x) x)) (\x   > -> f  (x x)   > )   > (\x -> "test")@@ -38,7 +38,7 @@  executable syntax-example   main-is:             Main.hs-  build-depends:       base >= 4 && < 5, lens, semi-iso >= 0.4,-                       syntax >= 0.2, syntax-attoparsec >= 0.2, syntax-printer,+  build-depends:       base >= 4 && < 5, lens, semi-iso >= 1,+                       syntax >= 1, syntax-attoparsec >= 1, syntax-printer >= 1,                        attoparsec, text, scientific >= 0.3   default-language:    Haskell2010