packages feed

syntactic 1.9 → 1.10

raw patch · 15 files changed

+245/−435 lines, 15 filesdep +tree-viewdep +utf8-string

Dependencies added: tree-view, utf8-string

Files

examples/NanoFeldspar/Core.hs view
@@ -171,13 +171,17 @@ printExpr :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> IO () printExpr = print . reifySmart (const True) canShareDict --- | Draw the syntax tree using ASCII+-- | Show the syntax tree using Unicode art showAST :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> String showAST = Syntactic.showAST . reifySmart (const True) canShareDict --- | Draw the syntax tree on the terminal using ASCII+-- | Draw the syntax tree on the terminal using Unicode art drawAST :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> IO () drawAST = Syntactic.drawAST . reifySmart (const True) canShareDict++-- | Convert the syntax tree to an HTML file with foldable nodes+writeHtmlAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> IO ()+writeHtmlAST = Syntactic.writeHtmlAST "tree.html" . desugar  -- | Evaluation eval :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> Internal a
src/Language/Syntactic/Constructs/Decoration.hs view
@@ -4,8 +4,10 @@   -import Data.Tree+import Data.Tree (Tree (..)) +import Data.Tree.View+ import Language.Syntactic  @@ -105,7 +107,7 @@  -- | Show an decorated syntax tree using ASCII art showDecorWith :: StringTree dom => (forall a. info a -> String) -> ASTF (Decor info dom) a -> String-showDecorWith showInfo = drawTree . stringTreeDecor showInfo+showDecorWith showInfo = showTree . stringTreeDecor showInfo  -- | Print an decorated syntax tree using ASCII art drawDecorWith :: StringTree dom => (forall a. info a -> String) -> ASTF (Decor info dom) a -> IO ()
src/Language/Syntactic/Interpretation/Render.hs view
@@ -5,12 +5,15 @@     , stringTree     , showAST     , drawAST+    , writeHtmlAST     ) where   -import Data.Tree+import Data.Tree (Tree (..)) +import Data.Tree.View+ import Language.Syntactic.Syntax  @@ -70,9 +73,12 @@  -- | Show a syntax tree using ASCII art showAST :: StringTree dom => ASTF dom a -> String-showAST = drawTree . stringTree+showAST = showTree . stringTree  -- | Print a syntax tree using ASCII art drawAST :: StringTree dom => ASTF dom a -> IO () drawAST = putStrLn . showAST++writeHtmlAST :: StringTree sym => FilePath -> ASTF sym a -> IO ()+writeHtmlAST file = writeHtmlTree file . fmap (\n -> NodeInfo n "") . stringTree 
syntactic.cabal view
@@ -1,5 +1,5 @@ Name:           syntactic-Version:        1.9+Version:        1.10 Synopsis:       Generic abstract syntax, and utilities for embedded languages Description:    This library provides:                 .@@ -107,6 +107,7 @@     mtl >= 2 && < 3,     template-haskell,     transformers >= 0.2,+    tree-view,     tuple >= 0.2    hs-source-dirs: src@@ -197,6 +198,5 @@     bytestring,     mtl >= 2 && < 3,     tasty,-    tasty-golden--+    tasty-golden,+    utf8-string
tests/NanoFeldsparTree.hs view
@@ -1,35 +1,35 @@ import Test.Tasty import Test.Tasty.Golden -import qualified Data.ByteString.Lazy.Char8 as B+import Data.ByteString.Lazy.UTF8 (fromString)  import NanoFeldspar.Core (showAST) import NanoFeldspar.Test   -mkGold_scProd = B.writeFile "tests/gold/scProd.txt" $ B.pack $ showAST scProd-mkGold_matMul = B.writeFile "tests/gold/matMul.txt" $ B.pack $ showAST matMul-mkGold_prog1  = B.writeFile "tests/gold/prog1.txt"  $ B.pack $ showAST prog1-mkGold_prog2  = B.writeFile "tests/gold/prog2.txt"  $ B.pack $ showAST prog2-mkGold_prog3  = B.writeFile "tests/gold/prog3.txt"  $ B.pack $ showAST prog3-mkGold_prog4  = B.writeFile "tests/gold/prog4.txt"  $ B.pack $ showAST prog4-mkGold_prog5  = B.writeFile "tests/gold/prog5.txt"  $ B.pack $ showAST prog5-mkGold_prog6  = B.writeFile "tests/gold/prog6.txt"  $ B.pack $ showAST prog6-mkGold_prog7  = B.writeFile "tests/gold/prog7.txt"  $ B.pack $ showAST prog7-mkGold_prog8  = B.writeFile "tests/gold/prog8.txt"  $ B.pack $ showAST prog8+mkGold_scProd = writeFile "tests/gold/scProd.txt" $ showAST scProd+mkGold_matMul = writeFile "tests/gold/matMul.txt" $ showAST matMul+mkGold_prog1  = writeFile "tests/gold/prog1.txt"  $ showAST prog1+mkGold_prog2  = writeFile "tests/gold/prog2.txt"  $ showAST prog2+mkGold_prog3  = writeFile "tests/gold/prog3.txt"  $ showAST prog3+mkGold_prog4  = writeFile "tests/gold/prog4.txt"  $ showAST prog4+mkGold_prog5  = writeFile "tests/gold/prog5.txt"  $ showAST prog5+mkGold_prog6  = writeFile "tests/gold/prog6.txt"  $ showAST prog6+mkGold_prog7  = writeFile "tests/gold/prog7.txt"  $ showAST prog7+mkGold_prog8  = writeFile "tests/gold/prog8.txt"  $ showAST prog8  tests = testGroup "TreeTests"-    [ goldenVsString "scProd" "tests/gold/scProd.txt" $ return $ B.pack $ showAST scProd-    , goldenVsString "matMul" "tests/gold/matMul.txt" $ return $ B.pack $ showAST matMul-    , goldenVsString "prog1"  "tests/gold/prog1.txt"  $ return $ B.pack $ showAST prog1-    , goldenVsString "prog2"  "tests/gold/prog2.txt"  $ return $ B.pack $ showAST prog2-    , goldenVsString "prog3"  "tests/gold/prog3.txt"  $ return $ B.pack $ showAST prog3-    , goldenVsString "prog4"  "tests/gold/prog4.txt"  $ return $ B.pack $ showAST prog4-    , goldenVsString "prog5"  "tests/gold/prog5.txt"  $ return $ B.pack $ showAST prog5-    , goldenVsString "prog6"  "tests/gold/prog6.txt"  $ return $ B.pack $ showAST prog6-    , goldenVsString "prog7"  "tests/gold/prog7.txt"  $ return $ B.pack $ showAST prog7-    , goldenVsString "prog8"  "tests/gold/prog8.txt"  $ return $ B.pack $ showAST prog8+    [ goldenVsString "scProd" "tests/gold/scProd.txt" $ return $ fromString $ showAST scProd+    , goldenVsString "matMul" "tests/gold/matMul.txt" $ return $ fromString $ showAST matMul+    , goldenVsString "prog1"  "tests/gold/prog1.txt"  $ return $ fromString $ showAST prog1+    , goldenVsString "prog2"  "tests/gold/prog2.txt"  $ return $ fromString $ showAST prog2+    , goldenVsString "prog3"  "tests/gold/prog3.txt"  $ return $ fromString $ showAST prog3+    , goldenVsString "prog4"  "tests/gold/prog4.txt"  $ return $ fromString $ showAST prog4+    , goldenVsString "prog5"  "tests/gold/prog5.txt"  $ return $ fromString $ showAST prog5+    , goldenVsString "prog6"  "tests/gold/prog6.txt"  $ return $ fromString $ showAST prog6+    , goldenVsString "prog7"  "tests/gold/prog7.txt"  $ return $ fromString $ showAST prog7+    , goldenVsString "prog8"  "tests/gold/prog8.txt"  $ return $ fromString $ showAST prog8     ]  main = defaultMain tests
tests/gold/matMul.txt view
@@ -1,87 +1,44 @@ Lambda 0-|-`- Lambda 1-   |-   `- Let 6-      |-      +- arrLength-      |  |-      |  `- getIx-      |     |-      |     +- var:1-      |     |-      |     `- 0-      |-      `- Let 7-         |-         +- arrLength-         |  |-         |  `- var:1-         |-         `- parallel-            |-            +- arrLength-            |  |-            |  `- var:0-            |-            `- Lambda 2-               |-               `- Let 8-                  |-                  +- min-                  |  |-                  |  +- arrLength-                  |  |  |-                  |  |  `- getIx-                  |  |     |-                  |  |     +- var:0-                  |  |     |-                  |  |     `- var:2-                  |  |-                  |  `- var:7-                  |-                  `- Let 9-                     |-                     +- getIx-                     |  |-                     |  +- var:0-                     |  |-                     |  `- var:2-                     |-                     `- parallel-                        |-                        +- var:6-                        |-                        `- Lambda 3-                           |-                           `- forLoop-                              |-                              +- var:8-                              |-                              +- 0.0-                              |-                              `- Lambda 4-                                 |-                                 `- Lambda 5-                                    |-                                    `- (+)-                                       |-                                       +- (*)-                                       |  |-                                       |  +- getIx-                                       |  |  |-                                       |  |  +- var:9-                                       |  |  |-                                       |  |  `- var:4-                                       |  |-                                       |  `- getIx-                                       |     |-                                       |     +- getIx-                                       |     |  |-                                       |     |  +- var:1-                                       |     |  |-                                       |     |  `- var:4-                                       |     |-                                       |     `- var:3-                                       |-                                       `- var:5+ └╴Lambda 1+    └╴Let 6+       ├╴arrLength+       │  └╴getIx+       │     ├╴var:1+       │     └╴0+       └╴Let 7+          ├╴arrLength+          │  └╴var:1+          └╴parallel+             ├╴arrLength+             │  └╴var:0+             └╴Lambda 2+                └╴Let 8+                   ├╴min+                   │  ├╴arrLength+                   │  │  └╴getIx+                   │  │     ├╴var:0+                   │  │     └╴var:2+                   │  └╴var:7+                   └╴Let 9+                      ├╴getIx+                      │  ├╴var:0+                      │  └╴var:2+                      └╴parallel+                         ├╴var:6+                         └╴Lambda 3+                            └╴forLoop+                               ├╴var:8+                               ├╴0.0+                               └╴Lambda 4+                                  └╴Lambda 5+                                     └╴(+)+                                        ├╴(*)+                                        │  ├╴getIx+                                        │  │  ├╴var:9+                                        │  │  └╴var:4+                                        │  └╴getIx+                                        │     ├╴getIx+                                        │     │  ├╴var:1+                                        │     │  └╴var:4+                                        │     └╴var:3+                                        └╴var:5
tests/gold/prog1.txt view
@@ -1,19 +1,10 @@ Lambda 0-|-`- Lambda 1-   |-   `- parallel-      |-      +- var:0-      |-      `- Lambda 2-         |-         `- min-            |-            +- (+)-            |  |-            |  +- var:2-            |  |-            |  `- 3-            |-            `- var:1+ └╴Lambda 1+    └╴parallel+       ├╴var:0+       └╴Lambda 2+          └╴min+             ├╴(+)+             │  ├╴var:2+             │  └╴3+             └╴var:1
tests/gold/prog2.txt view
@@ -1,15 +1,8 @@ Lambda 0-|-`- Let 1-   |-   +- min-   |  |-   |  +- var:0-   |  |-   |  `- var:0-   |-   `- max-      |-      +- var:1-      |-      `- var:1+ └╴Let 1+    ├╴min+    │  ├╴var:0+    │  └╴var:0+    └╴max+       ├╴var:1+       └╴var:1
tests/gold/prog3.txt view
@@ -1,59 +1,30 @@ Lambda 0-|-`- Lambda 1-   |-   `- Let 4-      |-      +- (+)-      |  |-      |  +- (-)-      |  |  |-      |  |  +- max-      |  |  |  |-      |  |  |  +- var:0-      |  |  |  |-      |  |  |  `- var:1-      |  |  |-      |  |  `- min-      |  |     |-      |  |     +- var:0-      |  |     |-      |  |     `- var:1-      |  |-      |  `- 1-      |-      `- Let 5-         |-         +- min-         |  |-         |  +- var:0-         |  |-         |  `- var:1-         |-         `- forLoop-            |-            +- var:4-            |-            +- 0-            |-            `- Lambda 2-               |-               `- Lambda 3-                  |-                  `- (+)-                     |-                     +- (+)-                     |  |-                     |  +- (-)-                     |  |  |-                     |  |  +- (-)-                     |  |  |  |-                     |  |  |  +- var:4-                     |  |  |  |-                     |  |  |  `- var:2-                     |  |  |-                     |  |  `- 1-                     |  |-                     |  `- var:5-                     |-                     `- var:3+ └╴Lambda 1+    └╴Let 4+       ├╴(+)+       │  ├╴(-)+       │  │  ├╴max+       │  │  │  ├╴var:0+       │  │  │  └╴var:1+       │  │  └╴min+       │  │     ├╴var:0+       │  │     └╴var:1+       │  └╴1+       └╴Let 5+          ├╴min+          │  ├╴var:0+          │  └╴var:1+          └╴forLoop+             ├╴var:4+             ├╴0+             └╴Lambda 2+                └╴Lambda 3+                   └╴(+)+                      ├╴(+)+                      │  ├╴(-)+                      │  │  ├╴(-)+                      │  │  │  ├╴var:4+                      │  │  │  └╴var:2+                      │  │  └╴1+                      │  └╴var:5+                      └╴var:3
tests/gold/prog4.txt view
@@ -1,21 +1,11 @@ Lambda 0-|-`- Let 2-   |-   +- (+)-   |  |-   |  +- var:0-   |  |-   |  `- var:0-   |-   `- parallel-      |-      +- var:0-      |-      `- Lambda 1-         |-         `- (*)-            |-            +- var:2-            |-            `- var:1+ └╴Let 2+    ├╴(+)+    │  ├╴var:0+    │  └╴var:0+    └╴parallel+       ├╴var:0+       └╴Lambda 1+          └╴(*)+             ├╴var:2+             └╴var:1
tests/gold/prog5.txt view
@@ -1,43 +1,22 @@ Lambda 0-|-`- Let 1-   |-   +- tup2-   |  |-   |  +- (*)-   |  |  |-   |  |  +- var:0-   |  |  |-   |  |  `- 2-   |  |-   |  `- (*)-   |     |-   |     +- var:0-   |     |-   |     `- 3-   |-   `- Let 2-      |-      +- sel1-      |  |-      |  `- var:1-      |-      `- Let 3-         |-         +- sel2-         |  |-         |  `- var:1-         |-         `- (*)-            |-            +- (-)-            |  |-            |  +- var:2-            |  |-            |  `- var:3-            |-            `- (-)-               |-               +- var:3-               |-               `- var:2+ └╴Let 1+    ├╴tup2+    │  ├╴(*)+    │  │  ├╴var:0+    │  │  └╴2+    │  └╴(*)+    │     ├╴var:0+    │     └╴3+    └╴Let 2+       ├╴sel1+       │  └╴var:1+       └╴Let 3+          ├╴sel2+          │  └╴var:1+          └╴(*)+             ├╴(-)+             │  ├╴var:2+             │  └╴var:3+             └╴(-)+                ├╴var:3+                └╴var:2
tests/gold/prog6.txt view
@@ -1,67 +1,34 @@ Let 9-|-+- parallel-|  |-|  +- (+)-|  |  |-|  |  +- (-)-|  |  |  |-|  |  |  +- 20-|  |  |  |-|  |  |  `- 1-|  |  |-|  |  `- 1-|  |-|  `- Lambda 0-|     |-|     `- (+)-|        |-|        +- var:0-|        |-|        `- 1-|-`- Let 10-   |-   +- forLoop-   |  |-   |  +- arrLength-   |  |  |-   |  |  `- var:9-   |  |-   |  +- 0-   |  |-   |  `- Lambda 2-   |     |-   |     `- Lambda 3-   |        |-   |        `- (+)-   |           |-   |           +- (*)-   |           |  |-   |           |  +- getIx-   |           |  |  |-   |           |  |  +- var:9-   |           |  |  |-   |           |  |  `- var:2-   |           |  |-   |           |  `- 2-   |           |-   |           `- var:3-   |-   `- (+)-      |-      +- (+)-      |  |-      |  +- (*)-      |  |  |-      |  |  +- getIx-      |  |  |  |-      |  |  |  +- var:9-      |  |  |  |-      |  |  |  `- 1-      |  |  |-      |  |  `- 2-      |  |-      |  `- var:10-      |-      `- var:10+ ├╴parallel+ │  ├╴(+)+ │  │  ├╴(-)+ │  │  │  ├╴20+ │  │  │  └╴1+ │  │  └╴1+ │  └╴Lambda 0+ │     └╴(+)+ │        ├╴var:0+ │        └╴1+ └╴Let 10+    ├╴forLoop+    │  ├╴arrLength+    │  │  └╴var:9+    │  ├╴0+    │  └╴Lambda 2+    │     └╴Lambda 3+    │        └╴(+)+    │           ├╴(*)+    │           │  ├╴getIx+    │           │  │  ├╴var:9+    │           │  │  └╴var:2+    │           │  └╴2+    │           └╴var:3+    └╴(+)+       ├╴(+)+       │  ├╴(*)+       │  │  ├╴getIx+       │  │  │  ├╴var:9+       │  │  │  └╴1+       │  │  └╴2+       │  └╴var:10+       └╴var:10
tests/gold/prog7.txt view
@@ -1,25 +1,13 @@ Lambda 0-|-`- Let 1-   |-   +- max-   |  |-   |  +- 5-   |  |-   |  `- (+)-   |     |-   |     +- 6-   |     |-   |     `- 7-   |-   `- condition-      |-      +- (==)-      |  |-      |  +- var:0-      |  |-      |  `- 10-      |-      +- var:1-      |-      `- var:1+ └╴Let 1+    ├╴max+    │  ├╴5+    │  └╴(+)+    │     ├╴6+    │     └╴7+    └╴condition+       ├╴(==)+       │  ├╴var:0+       │  └╴10+       ├╴var:1+       └╴var:1
tests/gold/prog8.txt view
@@ -1,39 +1,20 @@ Lambda 0-|-`- Let 3-   |-   +- parallel-   |  |-   |  +- 10-   |  |-   |  `- Lambda 1-   |     |-   |     `- (+)-   |        |-   |        +- var:1-   |        |-   |        `- var:0-   |-   `- condition-      |-      +- (==)-      |  |-      |  +- (*)-      |  |  |-      |  |  +- (*)-      |  |  |  |-      |  |  |  +- (*)-      |  |  |  |  |-      |  |  |  |  +- var:0-      |  |  |  |  |-      |  |  |  |  `- var:0-      |  |  |  |-      |  |  |  `- var:0-      |  |  |-      |  |  `- var:0-      |  |-      |  `- 23-      |-      +- var:3-      |-      `- var:3+ └╴Let 3+    ├╴parallel+    │  ├╴10+    │  └╴Lambda 1+    │     └╴(+)+    │        ├╴var:1+    │        └╴var:0+    └╴condition+       ├╴(==)+       │  ├╴(*)+       │  │  ├╴(*)+       │  │  │  ├╴(*)+       │  │  │  │  ├╴var:0+       │  │  │  │  └╴var:0+       │  │  │  └╴var:0+       │  │  └╴var:0+       │  └╴23+       ├╴var:3+       └╴var:3
tests/gold/scProd.txt view
@@ -1,39 +1,20 @@ Lambda 0-|-`- Lambda 1-   |-   `- forLoop-      |-      +- min-      |  |-      |  +- arrLength-      |  |  |-      |  |  `- var:0-      |  |-      |  `- arrLength-      |     |-      |     `- var:1-      |-      +- 0.0-      |-      `- Lambda 2-         |-         `- Lambda 3-            |-            `- (+)-               |-               +- (*)-               |  |-               |  +- getIx-               |  |  |-               |  |  +- var:0-               |  |  |-               |  |  `- var:2-               |  |-               |  `- getIx-               |     |-               |     +- var:1-               |     |-               |     `- var:2-               |-               `- var:3+ └╴Lambda 1+    └╴forLoop+       ├╴min+       │  ├╴arrLength+       │  │  └╴var:0+       │  └╴arrLength+       │     └╴var:1+       ├╴0.0+       └╴Lambda 2+          └╴Lambda 3+             └╴(+)+                ├╴(*)+                │  ├╴getIx+                │  │  ├╴var:0+                │  │  └╴var:2+                │  └╴getIx+                │     ├╴var:1+                │     └╴var:2+                └╴var:3