はい、Haskell には広く使用されているモデリング/仕様言語/手法があります。それらは視覚的ではありません。
Haskell では、型は部分的な仕様を提供します。場合によっては、この仕様が意味/結果を完全に決定する一方で、さまざまな実装の選択肢が残されます。Haskell を超えて、Agda や Coq (とりわけ) のように依存型を持つ言語に移行すると、型は完全な仕様としてより頻繁に役立ちます。
型だけでは不十分な場合は、正式な仕様を追加します。これは多くの場合、単純な機能形式を取ります。(したがって、Haskell で選択するモデリング言語は Haskell 自体または「数学」であるという答えになると思います。) このような形式では、すべてが効率ではなく、明快さと単純さのために最適化された関数定義を提供します。定義には、無限領域での関数の等価性などの計算不可能な操作が含まれる場合もあります。次に、段階を追って、仕様を効率的に計算可能な関数型プログラムの形式に変換します。すべてのステップでセマンティクス (表示) が維持されるため、最終的な形式 (「実装」) は元の形式 (「仕様」) と意味的に同等であることが保証されます。このプロセスは、「
典型的な導出のステップは、ほとんどが「等式推論」の適用であり、数学的帰納法 (および共帰納法) のいくつかの適用で補強されています。このような単純で有用な推論を実行できることは、そもそも関数型プログラミング言語の主な動機であり、その有効性は「真の関数型プログラミング」の「表示的」性質によるものです。(「表示的」および「真に関数的」という用語は、Peter Landin の影響力のある論文The Next 700 Programming languagesに由来します。) したがって、純粋な関数型プログラミングを求める声は、以前は「等式推論に適している」とされていましたが、その説明は聞いていません。最近ではほとんど同じです。ハスケルでは、IO
IO
STM
)。denotative/non-IO
型は正しい等式推論に適していますが、IO
/non-denotative 型は不正確な等式推論には適していません。
Haskell の作業で可能な限り頻繁に使用する derivation-from-specification の特定のバージョンは、私が「セマンティック型クラス射」(TCM) と呼んでいるものです。データ型のセマンティクス/解釈を提供し、TCM の原則を使用して、型クラスのインスタンスを介して型の機能のほとんどまたはすべての意味を (多くの場合、一意に) 決定するという考え方です。たとえば、Image
型の意味は 2D 空間からの関数であると言います。次に、TCM の原則はMonoid
、 、Functor
、Applicative
、Monad
、Contrafunctor
、およびComonad
インスタンスの意味を、関数のインスタンスに対応するものとして教えてくれます。それはたくさんあります非常に簡潔で説得力のある仕様を持つ画像の便利な機能の ! (仕様とは、セマンティック関数に、セマンティック TCM 原則が保持されなければならない標準型クラスのリストを加えたものです。) それでも、画像を表現する方法には非常に自由があり、セマンティック TCM 原則によって抽象化の漏れが排除されます。この原則の実際の例をいくつか見てみたい場合は、論文「型クラス射による表示設計」を参照してください。