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によって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix で実践的なプログラミングを行うには、少なくとも 3 つのトレイト(Trait)、すなわち EqOrderToString についての知識が必要です。

Eq トレイト

Eq トレイトは、ある特定の型の 2 つの値が等しいのはどのようなときかを表現します:

trait Eq[a] {

    ///
    /// `x` が `y` と等しい場合、かつその場合に限り `true` を返します。
    ///
    pub def eq(x: a, y: a): Bool

    // ... その他のメンバーは省略 ...
}

Eq を実装するには、eq 関数を実装するだけで済みます。eq を実装すると、Eq.neq の実装が自動的に得られます。

Order トレイト

Order トレイトは、ある値が同じ型の別の値以下であるのはどのようなときかを表現します:

trait Order[a] with Eq[a] {

    ///
    /// `x` < `y` の場合は `Comparison.LessThan` を、
    /// `x` == `y` の場合は `Equal` を、
    /// `x` > `y` の場合は `Comparison.GreaterThan` を返します。
    ///
    pub def compare(x: a, y: a): Comparison

    // ... その他のメンバーは省略 ...
}

Order トレイトを実装するには、Comparison 型の値を返す compare 関数を実装しなければなりません。Comparison データ型は次のように定義されています:

enum Comparison {
    case LessThan
    case EqualTo
    case GreaterThan
}

compare を実装すると、Order.lessOrder.lessThanOrder.greaterOrder.greaterEqualOrder.maxOrder.min の実装が自動的に得られます。

ToString トレイト

ToString トレイトは、特定の値の文字列表現を得るために使用されます:

trait ToString[a] {
    ///
    /// 与えられた `x` の文字列表現を返します。
    ///
    pub def toString(x: a): String
}

Flix は文字列補間(String interpolation)において ToString トレイトを使用します。

例えば、次の補間された文字列

"Good morning ${name}, it is ${hour} o'clock."

は、実際には次の式に対する糖衣構文です:

"Good morning " + ToString.toString(name) + ", it is " 
                + ToString.toString(hour) + " o'clock."

続くサブセクションでは、EqOrderToString トレイトの実装を自動的に導出する方法について説明します。