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

Note: このページは少しだけ更新されており、書き直しが予定されています。

Flix には、あらかじめ定義された一連のプリミティブエフェクト(primitive effect)が用意されています。代数エフェクト(algebraic effect)やヒープエフェクト(heap effect)とは異なり、プリミティブエフェクトはハンドルすることができず、スコープから外れることもありません。プリミティブエフェクトは、マシン上で発生する副作用を表します。それは取り消したり、再解釈したりすることはできません。

最も重要なプリミティブエフェクトは IO エフェクトです。

IO エフェクト

IO エフェクトは、プログラムの外側の世界と相互作用するあらゆるアクションを表します。そのようなアクションには、コンソールへの出力、ファイルの作成・読み込み・書き込み、ネットワークへのアクセスなどが含まれます。IO は、外側の世界を 変更する アクション(例:ファイルの変更)だけでなく、外側の世界に単に アクセスする アクション(例:現在時刻の取得)も表します。純粋関数とは異なり、IO エフェクトを持つ関数は、たとえ引数が同じであっても、呼び出されるたびに振る舞いが変わる可能性があります。たとえば、同じファイルを2回読み込んでも、2回のアクセスの間にファイルが変更されているかもしれないため、同じ結果が返るとは限りません。

IO エフェクト、そして他のすべてのプリミティブエフェクトは 伝播的(viral) です。ある関数がプリミティブエフェクトを持つ場合、その呼び出し元もすべて同じプリミティブエフェクトを持つことになります。つまり、いったん不純さに染まってしまうと、染まったままであり続けるのです。

その他のプリミティブエフェクト

  • NonDet: NonDet エフェクトは、ほぼ純粋な計算を表します。たとえば、コインを投げる関数は事実上純粋です。副作用を持ちません。しかし、同じ引数を与えられても、異なる結果を返す可能性があります。