わかりimport Data.List
ました。
しかしqualified
、ステートメントではどういう意味import qualified Data.List
ですか?
修飾されたインポートにより、インポートされたエンティティは修飾された形式でのみ使用可能になります。
import qualified Data.List
result :: [Int]
result = Data.List.sort [3,1,2,4]
だけimport Data.List
で、エンティティは修飾された形式と修飾されていない形式で利用できます。通常、修飾されたインポートを実行するだけでは名前が長すぎるため、
import qualified Data.List as L
result :: [Int]
result = L.sort [3,1,2,4]
map
修飾インポートを使用すると、Prelude
およびmap
からなど、複数のモジュールからインポートされた同じ名前の関数を使用できますData.Map
。
修飾されていないインポート(デフォルト)を実行する場合、名前だけでインポートされたものを参照できます。
修飾されたインポートを行う場合は、名前の前にインポート元のモジュールを付ける必要があります。
例えば、
import Data.List (sort)
これは無条件の輸入品です。sort
これで、またはのいずれかを言うことができますData.List.sort
。
import qualified Data.List (sort)
これは適格な輸入品です。今sort
ではそれ自体は機能しません、そしてあなたは言わなければなりませんData.List.sort
。
それはかなり長いので、通常あなたは次のようなことを言います
import qualified Data.List (sort) as LS
そして今、あなたLS.sort
はより短いと書くことができます。
キーワードqualified
は、インポートされたモジュール内のシンボルが非修飾(プレフィックスなし)名前空間にインポートされないことを意味します。それらは完全修飾名でのみ利用可能です。たとえばfoldr'
、修飾されていない名前foldr'
と修飾された名前がありData.List.foldr'
ます。
名前空間の汚染を防ぐために、修飾されたインポートを使用します。からインポートするが、インポートがから派生するかのように名前を付けてimport qualified Foo as Bar
、を使用することもできます。たとえば、と入力すると、として使用できます。Foo
Bar
import qualified Data.List as L
foldr'
L.foldr'