2016-05-24 3 views
1

からのデータコンストラクタを公開し、インポート:は、私は1つのモジュールタイプを定義したい私のエルム・プログラムでは、別のモジュール

MyModule.elm:

module MyModule exposing (MyType) 
type MyType = Constr1 String | Constr2 Int 

別では、この型の値を構築しますモジュール:

Main.elm:

import MyModule exposing (MyType) 
import Html exposing (text) 
main = 
    let x = Constr1 "foo" in 
     text "hello" 

私はこれをビルドする:

elm-package install elm-lang/html && elm-make Main.elm 

は私が手:

NAMING ERROR ------------------------------------------------------- Main.elm 

Cannot find variable `Constr1` 

6|  let x = Constr1 "foo" in 
       ^^^^^^^ 


Detected errors in 1 module.  

私は両方exposing句で(..)を使用している場合、これはうまくコンパイルが、私はコンストラクタを公開することを表現する方法を知っていただきたいと思います。

サイドノート:私はドキュメントでこれを見つけたはずです。

module MyModule exposing (MyType(Constr1, Constr2)) 

タイプのすべてのコンストラクタは(..)表記用いて露光することができます:

module MyModule exposing (MyType(..)) 

をそして、あなたがしたくない場合は、次のように公開するコンストラクタを指定することができ

答えて

5

任意のコンストラクターを公開します(つまり、型の値を作成するほかの公開された関数があることを意味します)。

module MyModule exposing (MyType, otherFunctions) 

このトピックに関するコミュニティドキュメントはelm-community.github.io/elm-faq

+0

です。ありがとうございます!これがドキュメント内のどこにあるかに関するコメント? –

+0

私はそれをコミュニティのドキュメントに追加しますので、ここに表示されます(http://elm-community.github.io/elm-faq/#why-when-i-import-a-module-that-defines -a-type-does-the-compiler-type-name-but-not-its-constructors) –

+0

素晴らしい、ありがとう。なぜ私はこれをしてはならないのか、私は行こうとします。 –

関連する問題