【问题标题】:turning Strings into Text in Haskell在 Haskell 中将字符串转换为文本
【发布时间】:2016-05-15 19:32:38
【问题描述】:

使用 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 似乎需要命名空间。然后我们可以写T.writeFile,而不是Data.Text.writeFile
  • Data.Text.writeFile 没有出现在hackageData.Text 上的条目中,但我确实发现它与prelude 相关。

这是一个简单的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 的工作原理有很大的疑问。现在......我什至如何在这里将字符串更改为文本?

【问题讨论】:

    标签: haskell d3.js io


    【解决方案1】:

    使用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 即可。

    【讨论】:

      【解决方案2】:

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

      https://ocharles.org.uk/blog/posts/2014-12-17-overloaded-strings.html了解更多信息。

      【讨论】:

        猜你喜欢
        • 2018-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-17
        • 1970-01-01
        • 2020-12-30
        • 2017-02-25
        • 1970-01-01
        相关资源
        最近更新 更多