2

在为我的函数声明类型时,我注意到我需要从“内部”模块导入额外的构造函数只是为了这个目的。这是一个(简化的)示例:

import Data.Text.Encoding
import Data.Text.Internal
import Data.ByteString.Internal

foo :: Data.ByteString.Internal.ByteString -> Data.Text.Internal.Text   
foo = decodeUtf8

出于某种目的,我认为这些模块被命名为“内部”。然而,他们携带的类型是出口到公众的。明确依赖它们是一种好习惯吗?

4

1 回答 1

7

Text类型在中声明Data.Text.Internal。但是,它是从 重新导出的Data.Text,因此只需导入该模块即可为您提供所需的一切。

我认为问题在于您将类型称为Data.Text.Internal.Text; 如果您简单地引用Text它应该可以工作:

import Data.ByteString
import Data.Text

foo :: ByteString -> Text
于 2013-09-13T19:48:28.677 回答