haskell - 带有反射 frp 的单个 svg 元素

标签 haskell svg reflex

我正在尝试在反射 FRP 中编写单个 SVG 元素

import Reflex.Dom
import qualified Data.Map as Map

main = mainWidget $ myDiv

myDiv = el "svg" $ do
  elAttr "circle"  $ Map.fromList [ ("cx" , "50") , ("cy", "50"), ("r" , "40"), ("stroke" , "green"), ("fill",  "yellow" )]

这不能编译。希望Data.Map是正确的。我从quickref知道类型签名是:

elAttr     :: String ->          Map String String  -> m a -> m a

有点好奇 monad mmainWidget 相关联,但主要只是开始工作。

这是使用 reflex 附带的沙箱编译的.

最佳答案

这里有两件事需要解决。

首先,你想要返回一些东西,通常基本的return()将允许你编译。

其次,elAttr 采用 2 个输入类型,因此在“圆圈”之后,您需要将第二个参数放在括号中,而不是 $ 中。

这就是它的样子:

import Reflex.Dom
import qualified Data.Map as Map

main = mainWidget $ myDiv

myDiv = el "svg" $ do
  elAttr "circle"  (Map.fromList [ ("cx" , "50") , ("cy", "50"), ("r" , "40"), ("stroke" , "green"), ("fill",  "yellow" )]) $ return ()

编译后,您应该能够在浏览器的元素检查器中看到这一点。

<html>
  <head>
    <script language="javascript" src="rts.js"></script>
    <script language="javascript" src="lib.js"></script>
    <script language="javascript" src="out.js"></script>
  </head>
  <body>
    <svg>
     <circle cx="50" cy="50" fill="yellow" r="40" stroke="green"></circle>
    </svg>
  </body>
</html>

如果您想看到它显示在浏览器中,请确保在 svg 元素中定义此属性 xmlns="http://www.w3.org/20000/svg"下面是 elDynAttrNS':

main = mainWidget $ myDiv

myDiv = do
  let attrs = constDyn $ fromList
               [ ("width" , "500")
               , ("height" , "250")
               ]
  let cAttrs = constDyn $ fromList
               [ ("cx", "50")
               , ("cy", "50")
               , ("r", "40")
               , ("stroke", "green")
               , ("stroke-width", "3")
               , ("fill",  "yellow" )
               ]

  s <- elSvg "svg" attrs (elSvg "circle" cAttrs (return ()))
  return ()

elSvg tag a1 a2 = do
  elDynAttrNS' ns tag a1 a2
  return ()

ns :: Maybe String
ns = Just "http://www.w3.org/2000/svg"

关于haskell - 带有反射 frp 的单个 svg 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268962/

相关文章:

javascript - SVG 保持新数据可见

haskell - 是否可以使用 cabal 将 c 代码与 Haskell 打包?

haskell - 堆栈没有正确解决依赖关系

css - 将 SVG 后跟标点符号视为一个词

css - D3 图表 - 在刻度值和轴路径线之间放置空间

haskell - 根据数字用户输入构建反射域小部件/事件的动态列表

haskell - 由总和类型值填充的反射下拉菜单

haskell - 如何在 GHCi 重新加载之间保持环境?

haskell - 我可以在不过分宽容的情况下自动为转换函数生成类型类实例吗?