在为我的函数声明类型时,我注意到我需要从“内部”模块导入其他构造函数,仅用于此目的。这是一个(简化)示例:
import Data.Text.Encoding
import Data.Text.Internal
import Data.ByteString.Internal
foo :: Data.ByteString.Internal.ByteString -> Data.Text.Internal.Text
foo = decodeUtf8
我认为这些模块被命名为“内部”。然而,它们带有出口到公众的类型。明确依赖它们是好的做法吗?
答案 0 :(得分:6)
Text
中的Data.Text.Internal
类型是声明的。但是,它会从Data.Text
重新导出,因此只需导入该模块即可为您提供所需的一切。
我认为问题在于您将类型称为Data.Text.Internal.Text
;如果您简单地将其称为Text
它应该有效:
import Data.ByteString
import Data.Text
foo :: ByteString -> Text