packages feed

fay 0.23.1.7 → 0.23.1.8

raw patch · 4 files changed

+120/−2 lines, 4 filesdep ~aesondep ~optparse-applicativedep ~sybPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aeson, optparse-applicative, syb, tasty, vector

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -2,6 +2,10 @@  See full history at: <https://github.com/faylang/fay/commits> +#### 0.23.1.8++* Allow `vector 0.11.*`+ #### 0.23.1.7  * Fix panic when compiling irrefutable pattern matches on lists (thanks Christopher Parks)
+ examples/D3TreeSample.hs view
@@ -0,0 +1,96 @@+module D3TreeSample where++import FFI+import Data.Char++data Event+data D3SvgCanvas+data D3SvgDiagonal+data D3SvgLink+data D3SvgNode+data D3LayoutTree+data D3LayoutTreeNodes+data D3LayoutTreeLinks++--------- D3: A JavaScript visualization library for HTML and SVG. http://d3js.org+--------- Usage example with Fay++--------- JSON FEED++data JsonTree = JsonNode { name :: String, children :: JsonForest }+type JsonForest = [JsonTree]++unfoldTree :: (Int -> (String, [Int])) -> Int -> JsonTree+unfoldTree f b = let (a, bs) = f b in JsonNode a (unfoldForest f bs)++unfoldForest :: (Int -> (String, [Int])) -> [Int] -> JsonForest+unfoldForest f = map (unfoldTree f)++createJson :: Int -> JsonTree+createJson = unfoldTree (\n -> ([chr (n + ord 'a')], replicate n (n-1)))++--------- FFI++addWindowEvent :: String -> (Event -> Fay ()) -> Fay ()+addWindowEvent = ffi "window.addEventListener(%1, %2)"++createSvgCanvas :: Int -> Int -> Fay D3SvgCanvas+createSvgCanvas = ffi "d3.select('#viz')\+                                        \.append('svg:svg').attr('width', %1).attr('height', %2)\+                                        \.append('svg:g').attr('transform', 'translate(40, 40)')"++createTree :: Int -> Int -> Fay D3LayoutTree+createTree = ffi "d3.layout.tree().size([%1,%2])"++createDiagonal :: Fay D3SvgDiagonal+createDiagonal = ffi "d3.svg.diagonal().projection(function(d) { return [d.x, d.y]; })"++createNodes :: D3LayoutTree -> JsonTree -> Fay D3LayoutTreeNodes+createNodes = ffi "%1.nodes(%2)"++createLinks :: D3LayoutTree -> D3LayoutTreeNodes -> Fay D3LayoutTreeLinks+createLinks = ffi "%1.links(%2)"++displayLinks :: D3SvgCanvas -> D3LayoutTreeLinks -> D3SvgDiagonal -> Fay D3SvgLink+displayLinks = ffi "%1.selectAll('pathlink').data(%2)\+                                                     \.enter().append('svg:path')\+                                                     \.attr('class', 'link')\+                                                     \.attr('d', %3)"++displayNodes :: D3SvgCanvas -> D3LayoutTreeNodes -> Fay D3SvgNode+displayNodes = ffi "%1.selectAll('g.node').data(%2)\+                                                   \.enter().append('svg:g')\+                                                   \.attr('transform', \+                                                   \function(d) { return 'translate(' + d.x + ',' + d.y + ')'; })"++addDotToNodes :: D3SvgNode -> Double -> Fay ()+addDotToNodes = ffi "%1.append('svg:circle').attr('r', %2)"++addTextToNodes :: D3SvgNode -> Fay()+addTextToNodes = ffi "%1.append('svg:text')\+                                           \.attr('dx', function(d) { return d.children ? -8 : 8; })\+                                           \.attr('dy', 3)\+                                           \.attr('text-anchor', function(d) { return d.children ? 'end' : 'start'; })\+                                           \.text(function(d) { return d.name; })"++--------- START++d3TreeSample :: Event -> Fay()+d3TreeSample event = do+    svgCanvas <- createSvgCanvas 800 600+    d3Tree <- createTree 600 300+    diagonal <- createDiagonal++    nodes <- createNodes d3Tree (createJson 4)+    links <- createLinks d3Tree nodes++    svgLink <- displayLinks svgCanvas links diagonal+    svgNode <- displayNodes svgCanvas nodes++    addDotToNodes svgNode 2.5+    addTextToNodes svgNode+++main :: Fay ()+main = do+    addWindowEvent "load" d3TreeSample
+ examples/D3TreeSample.html view
@@ -0,0 +1,18 @@+<!doctype html>+<html>+  <head>+    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>+    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" charset="utf-8"></script>+    <script type="text/javascript" src="D3TreeSample.js"></script>+    <style>+      .link {+      fill: none;+      stroke: #ccc;+      stroke-width: 2.5px;+      }+   </style>+  </head>+  <body>+    <div id="viz"></div>+  </body>+</html>
fay.cabal view
@@ -1,5 +1,5 @@ name:                fay-version:             0.23.1.7+version:             0.23.1.8 synopsis:            A compiler for Fay, a Haskell subset that compiles to JavaScript. description:         Fay is a proper subset of Haskell which is type-checked                      with GHC, and compiled to JavaScript. It is lazy, pure, has a Fay monad,@@ -163,7 +163,7 @@     , uniplate >= 1.6.11 && < 1.7     , unordered-containers < 0.3     , utf8-string < 1.1-    , vector < 0.11+    , vector < 0.12    if impl(ghc < 7.8)     build-depends: tagged