Haskell-d3js中的条形图

Haskell-d3js中的条形图,haskell,d3.js,data-visualization,Haskell,D3.js,Data Visualization,我决定浏览哈斯克尔的图书馆,但后来没有通过Stackage安装 $ stack install d3js Run from outside a project, using implicit global project config Using resolver: lts-5.2 from implicit global project's config file: /home/john/.stack/global-project/stack.yaml While constructing

我决定浏览哈斯克尔的图书馆,但后来没有通过Stackage安装

$ stack install d3js

Run from outside a project, using implicit global project config
Using resolver: lts-5.2 from implicit global project's config file: /home/john/.stack/global-project/stack.yaml
While constructing the BuildPlan the following exceptions were encountered:

--  Failure when adding dependencies:    
      base: needed (>=4.6 && <4.7), 4.8.2.0 found (latest applicable is 4.6.0.1)
    needed for package d3js-0.1.0.0
即使是这个简单的例子,我也有很多问题如何具体化工作?我不得不在字典中查找这个词:

把(抽象的东西)视为物质或具体的东西

你知道吗? 具体化这个词试图在抽象和真实之间架起一座桥梁。恰当地说,它源于一个“真实”的祖先——拉丁名词Res,意思是“事物”。“再化”和相关名词“物化”在19世纪中叶首次出现在英语中,尽管“物化”是几年前的事,有些词典认为“归化”是名词的背面构成。在一般用法中,这些词指的是以真实或物质的方式考虑或提出抽象概念的行为,或通过具体的例子来判断某事物的行为

如上所述,d3.js库中的具体化函数将表示d3.js对象的Haskell实体转换为实际的d3.js代码。我们有可变现对象的例子吗?我们可以说:

reify (box "#div1" (300,300) >>= bars n 300 (Data1D [100,20,80,60,120]))
括号中的对象是可重新定义的对象。浏览源代码既有启发性又令人沮丧:

-- |Instances of Reifiable can generate a JavaScript code fragment.
class Reifiable a where
    reify :: a -> Text
这是从有可变现对象的例子吗?让我们看看:

这些是可修改类型的示例,但它们没有告诉我们如何在haskell-d3js中构造图表

-- | box parent (w,h) makes an SVG container in a parent element with dimension w x h.
box :: Selector ->  (Double,Double) -> St (Var' Selection)
box parent (w,h) = do
    assign
        $ ((d3Root
            >>> select parent
            >>> func "append" [PText "svg"]
            >>> width w
            >>> height h
            >>> style "background" "#eef") :: Chain () Selection)

bars :: Int -> Double -> Data1D -> Var' Selection -> St ()
bars n width ps (Var' elem) = do
    let bar_w = width / (fromIntegral n)
    v <- assign $ Val' (mkRectData bar_w ps)
    execute $
        (Val elem :: Chain () Selection)
        >>> addRect v
        >>> fill' "red"

不确定您的问题是什么,但以下是如何运行d3js演示:

  • 运行以下命令:

    stack new demo
    cd demo
    cabal get d3js-0.1.0.0
    
  • 确保stack.yaml中的
    解析器:
    设置相对较新(例如>=5.0)

  • stack.yaml
    文件中,将
    packages
    节更改为:

    packages:
    - '.'
    - d3js-0.1.0.0
    
  • 在文件
    d3js-0.1.0.0/d3js.cabal
    中修改
    build dependens
    行,内容如下:

      build-depends:       base >=4.6
    
  • (即省略
    基的上限

  • demo.cabal
    中,使
    节看起来像:

    library
      hs-source-dirs:      src
      exposed-modules:     Lib
      build-depends:       base >= 4.8 && < 5, d3js, text
      default-language:    Haskell2010
    
  • 运行
    stack ghci
    并运行类似于
    test13
    函数的操作。查看
    generated.js
    中的输出


  • d3js
    包已经有一段时间没有更新了,它对
    base
    包施加了过于严格的上限。事实证明,使用最新的
    base
    它可以很好地编译,因此我们将d3js源代码作为我们自己项目的一部分,并对其进行调整以使其能够编译。

    不确定您的问题是什么,但下面是如何让d3js演示运行:

  • 运行以下命令:

    stack new demo
    cd demo
    cabal get d3js-0.1.0.0
    
  • 确保stack.yaml中的
    解析器:
    设置相对较新(例如>=5.0)

  • stack.yaml
    文件中,将
    packages
    节更改为:

    packages:
    - '.'
    - d3js-0.1.0.0
    
  • 在文件
    d3js-0.1.0.0/d3js.cabal
    中修改
    build dependens
    行,内容如下:

      build-depends:       base >=4.6
    
  • (即省略
    基的上限

  • demo.cabal
    中,使
    节看起来像:

    library
      hs-source-dirs:      src
      exposed-modules:     Lib
      build-depends:       base >= 4.8 && < 5, d3js, text
      default-language:    Haskell2010
    
  • 运行
    stack ghci
    并运行类似于
    test13
    函数的操作。查看
    generated.js
    中的输出


  • d3js
    包已经有一段时间没有更新了,它对
    base
    包施加了过于严格的上限。事实证明,使用最新的
    base
    可以很好地编译它,因此我们将d3js源代码作为我们自己项目的一部分,并对其进行调整,以使其能够编译。

    这很好,您可以运行它。我想知道当你制作不属于他的例子的图表时会发生什么?“Erikr也可以考虑将你的补丁规则提交到 D3JS包中,这样人们就可以在没有调整的情况下简单地写代码>堆栈安装< /代码>。我想知道当你制作不属于他的例子的图表时会发生什么?“Erikr也可以考虑将你的补丁规则提交到 D3JS包中,这样人们就可以简单地在没有调整的情况下编写代码>堆栈安装< /代码>。