2

関数の型を宣言するとき、その目的のためだけに「内部」モジュールから追加のコンストラクターをインポートする必要があることに気付きました。以下は (簡略化された) 例の 1 つです。

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 に答える