在Haskell中将字符串转换为Text

时间:2016-05-15 19:32:38

标签: haskell d3.js io

使用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如何运作有很大的疑问。现在......我怎么在这里将字符串更改为文本?

2 个答案:

答案 0 :(得分:2)

使用Data.Text.packString转换为Text

pack :: String -> Text

此外,writeFile的文字版本会显示在Data.Text.IO中,例如:

import qualified Data.Text.IO as T

T.writeFile "helloWorld.txt" (T.pack "Hello World!")

可以将Data.TextData.Text.IO同时导入T

答案 1 :(得分:2)

除了提到的转换函数之外,您可能还希望使用文件顶部的{-# LANGUAGE OverloadedStrings #-} pragma来启用OverloadedStrings扩展,这样您就可以编写字符串文字,但会自动转换它们到兼容类型(比如Text)。

https://ocharles.org.uk/blog/posts/2014-12-17-overloaded-strings.html了解详情。