使用Haskell d3.js库我试图使条形图成为条形图。
import Control.Monad
import qualified Data.Text as T
import D3JS
test :: Int -> IO ()
test n = T.writeFile "generated.js" $ reify (box "#div1" (300,300) >>= bars n 300 (Data1D [100,20,80,60,120]))
即使有这个简单的例子,我也有很多问题。
import qualified
似乎需要命名空间。然后我们可以写Data.Text.writeFile
T.writeFile
Data.Text.writeFile
似乎没有列在Data.Text
的{{3}}条目中,但我发现它与hackage有关。以下是一个简单的T.writeFile
错误示例:
> import qualified Data.Text.IO as T
> T.writeFile "helloWorld.txt" "Hello World!"
Couldn't match expected type ‘Text’ with actual type ‘String’
希望所有这些类型转换都可以整理出来。那么我对reify
如何运作有很大的疑问。现在......我怎么在这里将字符串更改为文本?
答案 0 :(得分:2)
使用Data.Text.pack
将String
转换为Text
:
pack :: String -> Text
此外,writeFile
的文字版本会显示在Data.Text.IO
中,例如:
import qualified Data.Text.IO as T
T.writeFile "helloWorld.txt" (T.pack "Hello World!")
可以将Data.Text
和Data.Text.IO
同时导入T
。
答案 1 :(得分:2)
除了提到的转换函数之外,您可能还希望使用文件顶部的{-# LANGUAGE OverloadedStrings #-}
pragma来启用OverloadedStrings
扩展,这样您就可以编写字符串文字,但会自动转换它们到兼容类型(比如Text
)。
在https://ocharles.org.uk/blog/posts/2014-12-17-overloaded-strings.html了解详情。