55

わかりimport Data.Listました。

しかしqualified、ステートメントではどういう意味import qualified Data.Listですか?

4

3 に答える 3

59

修飾されたインポートにより、インポートされたエンティティは修飾された形式でのみ使用可能になります。

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

于 2012-06-30T14:30:38.453 に答える
45

修飾されていないインポート(デフォルト)を実行する場合、名前だけでインポートされたものを参照できます。

修飾されたインポートを行う場合は、名前の前にインポート元のモジュールを付ける必要があります。

例えば、

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はより短いと書くことができます。

于 2012-06-30T14:32:43.040 に答える
17

キーワードqualifiedは、インポートされたモジュール内のシンボルが非修飾(プレフィックスなし)名前空間にインポートされないことを意味します。それらは完全修飾名でのみ利用可能です。たとえばfoldr'、修飾されていない名前foldr'と修飾された名前がありData.List.foldr'ます。

名前空間の汚染を防ぐために、修飾されたインポートを使用します。からインポートするが、インポートがから派生するかのように名前を付けてimport qualified Foo as Bar、を使用することもできます。たとえば、と入力すると、として使用できます。FooBarimport qualified Data.List as Lfoldr'L.foldr'

于 2012-06-30T14:32:18.470 に答える