Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

モジュールの使用

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

すでに見てきたように、use 構文はモジュールのメンバーをローカルスコープに持ち込みます。

例えば、次のプログラムがあるとします:

mod A {
    mod B {
        pub enum Color {
            case Red, Green, Blue
        }

        pub type alias Hue = Color 

        pub def isWarm(c: Color): Bool = 
            match c {
                case Color.Red    => true
                case Color.Green  => false
                case Color.Blue   => false
            }

    }
}

このとき、以下の use はすべて意味を持ちます:

use A.B.Color 
use A.B.Color.{Red, Green, Blue}
use A.B.Hue
use A.B.isWarm 

さまざまな種類の use

Flix は、以下を含む複数の種類の use をサポートしています:

  • 名前の修飾付き use:use A.B.Color
  • 複数の名前の修飾付き use:use A.B.Color.{Red, Green, Blue}
  • リネームを伴う修飾付き use:use A.B.Color => AColor
  • 複数のリネームを伴う修飾付き use:use A.B.Color.{Red => R, Green => G, Blue => B}

注意: Flix はワイルドカードをサポートしていません。

use はどこに書けるのか?

Flix では、次の 2 つの場所で use を使えます:

  • モジュールの内部
  • 関数の内部

例えば:

mod A {
    use Chain
    use Chain.Empty
    use Chain.Chain
    use Int32.max

    pub def maxValue(c: Chain[Int32]): Int32 = 
        match c {
            case Empty       => 0
            case One(x)      => x
            case Chain(x, y) => max(maxValue(x), maxValue(y))
        }
}

これは次のように書くこともできます:

mod A {
    use Chain

    pub def maxValue(c: Chain[Int32]): Int32 = 
        use Chain.Empty;
        use Chain.Chain;
        use Int32.max;
        match c {
            case Empty       => 0
            case One(x)      => x
            case Chain(x, y) => max(maxValue(x), maxValue(y))
        }
}

式の内部ではセミコロンが使われている点に注意してください。

デフォルトの use

Flix では、いくつかの組み込みコンストラクタが常にスコープ内にあります:

  • List.NilList.Cons
  • Result.OkResult.Err