2017-09-10 9 views
3

タイプとタイプ別名Foo、Bar、Bazからなるタイプのelmモジュールがあります。私はそうのように、すべてをエクスポートすると、コードは動作します:Elmで公開されているモジュール0.18

module Types exposing (..)

をしかし、私は明示的なタイプのすべての、コードブレークが含まれている場合。

module Types exposing (Foo, Bar, Baz)

これも消費するファイルのimport文の事実です。どちらも必要ですexposing (..)

これら2つのアプローチの違いは何ですか?

+0

これらのタイプがどのように定義されているかの例を含めることができます。これが重要な理由の例は、Unionタイプにタグ/データコンストラクタを組み込むための特別な構文があることです。 – jpierson

+0

@jpiersonコンパイラエラーのすべては、 'Msg'をエクスポートしようとしたところから来ています。他のタイプのように 'Msg'をエクスポートしようとしていて、それを' type Msg = FirstAction | SecondAction | ThirdAction ... 'と私のコードでそれらのアクションを見つけることができません。 –

答えて

5

私はごく最近エルム自分自身を学んでいるが、あなたのタイプ(Msg)の1ので、このタイプをエクスポートするときに、あなたがMsg(..)構文を使用する必要があります組合型として定義されているように聞こえます。

module Types exposing (Msg (..)) 

type Msg = FirstAction | SecondAction | ThirdAction 

またはユニオン型をインポートの場合

import Types exposing (Msg (..)) 

これは、労働組合のタイプのために必要とされる理由の説明のためのGitHub issue #968を参照してください。このタイプの定義で

2

ルック:

type Foo 
     = Foo 
     | Baz 
     | Quux 

次の2つのFoo年代を参照してください。以前は、型コンストラクタであり、後者は、データコンストラクタです。型コンストラクタとデータコンストラクタは異なる名前空間に存在するため、両方に同じ名前を使用できます。

あなたは

import Types exposing (Foo) 

を書いているだけ型コンストラクタFooをインポートしています。 Fooのデータコンストラクタをインポートするには、型コンストラクタのインポート後の括弧内に明示的にそれをしなければならない。

import Types exposing (Foo (Foo, Baz)) 

か、あなたがこのタイプのすべてのデータのコンストラクタをインポートする場合:

import Types exposing (Foo (..)) 
関連する問題