0

我正在尝试使用以下主要功能创建一组图表:

main = mainWith [("here0", myDiagram), ("here1", myDiagram)]

并收到以下错误:

No diagram selected.
Available diagrams:
  here0 here1

知道这个错误是什么意思吗?


更多细节:

我的“myDiagram”有类型:

myDiagram :: Diagram B

当 main 函数改为:

main = mainWith myDiagram

编辑:

感谢您的评论。我查看了链接的命令行教程并尝试尽可能地遵循它(包括指定 -s 选项),但仍然遇到同样的问题。这正是我所做的:

创建了一个文件“Animation.hs”:

{-# LANGUAGE NoMonomorphismRestriction #-}

import Diagrams.Prelude 
import Diagrams.Backend.SVG.CmdLine

main = mainWith [("myBlue", myBlue), ("myGreen", myGreen)]

myBlue :: Diagram B
myBlue = circle 1 # lw none # fc blue

myGreen :: Diagram B
myGreen = circle 1 # lw none # fc green

通过以下方式编译它:

ghc --make Animation.hs

显示了要渲染的可用图表,其中:

./Animation --list

正如预期的那样,它返回了:

Available diagrams:
  myBlue myGreen

但最后,尝试通过以下方式生成 .svg 之一:

./Animation -o out.svg -w 400 -s myBlue

回来:

No diagram selected.
Available diagrams:
  myBlue myGreen

我觉得一定有一些我缺少但似乎找不到的简单的东西——我正在用“-s myBlue”指定一个列出的可用图表。

4

1 回答 1

2

如果以这种方式使用,则必须通过命令行选项选择mainWith将呈现哪些图表。-S引用官方命令行教程

如果我们有多个带有名称的图表,我们可以使用 mainWith 提供一个允许按名称选择特定图表的界面。

> -- Multiple
>
> d1, d2, d3 :: Diagram SVG V2 Double
> ...
>
> main = mainWith [("First", d1),("Second", d2),("Third", d3)]

--list 选项仅列出要呈现的可用图表,而 -S 选择选项采用名称并使用标准选项呈现关联的图表。

$ ./Multiple --list
Available diagrams:
  First Second Third
$ ./Multiple -o d1.svg -w 100 -S First

请注意,使用的选项是-S,而不是-s教程中的选项(截至 2016 年 10 月 25 日)。由于此问题,该选项已更改,但该更改尚未反映在教程中(尽管已接受修复它的补丁,因此它应该很快就会变得正确)。该程序的帮助信息是正确的,但:

$ stack --resolver=lts-7.2 exec -- runhaskell Dag.hs -?
Dag.hs

Usage: Dag.hs [-?|--help] [-w|--width WIDTH] [-h|--height HEIGHT]
              [-o|--output OUTPUT] [-l|--loop] [-s|--src ARG]
              [-i|--interval INTERVAL] [-p|--pretty] [-S|--selection NAME]
              [-L|--list]
  Command-line diagram generation.

Available options:
  -?,--help                Show this help text
  -w,--width WIDTH         Desired WIDTH of the output image
  -h,--height HEIGHT       Desired HEIGHT of the output image
  -o,--output OUTPUT       OUTPUT file
  -l,--loop                Run in a self-recompiling loop
  -s,--src ARG             Source file to watch
  -i,--interval INTERVAL   When running in a loop, check for changes every
                           INTERVAL seconds.
  -p,--pretty              Pretty print the SVG output
  -S,--selection NAME      NAME of the diagram to render
  -L,--list                List all available diagrams
于 2016-10-15T17:19:52.500 回答