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 では、開発中の未完成なコードに Hole(ホール)を使うことが推奨されています。例えば:

def sum(x: Int32, y: Int32): Int32 = ???

3 つ並んだクエスチョンマーク ??? は匿名ホールを表し、式が期待される場所ならどこでも使えます。上記のコードでは、??? はまだ書かれていない関数本体を表していますが、式の内部でも使えます。例えば:

def length(l: List[a]): Int32 = match l {
    case Nil     => 0
    case x :: xs => ???
}

プログラムに複数のホールがある場合は、それぞれに名前を付けると便利です。例えば:

def length(l: List[a]): Int32 = match l {
    case Nil     => ?base
    case x :: xs => ?step
}

Flix では、各名前付きホールは一意な名前を持つ必要があります。

変数ホールと自動補完

Flix は、型駆動の自動補完候補を提示できる特別な 変数ホール をサポートしています。例えば、次のプログラムで:

def main(): Unit \ IO = 
    let s: String = "Hello World";
    let n: Int32 = s?;
    println("The length of ${s} is ${n}!")

カーソルを s? の上に置いて自動補完候補を要求すると、Flix は次のような候補を提示します:

  • String.length(s: String): Int32
  • String.countSubstring(substr: {substr: String}, s: String): Int32
  • String.levenshtein(s: String, t: String): Int32

これらは StringInt32 に変換できる関数だからです。

別の例として、次のプログラムで:

def main(): Unit \ IO = 
    let l: List[Int32] = List.range(1, 10);
    let n: Int32 = l?;
    println("The value of `n` is ${n}.")

カーソルを l? の上に置くと、Flix は次のような候補を提示します:

  • List.product(l: List[Int32]): Int32
  • List.sum(l: List[Int32]): Int32
  • List.fold(l: List[Int32]): Int32
  • List.length(l: List[Int32]): Int32
  • List.count(f: a -> Bool \ ef, l: List[a]): a \ ef

これらは List[Int32]Int32 に変換できる関数だからです。