型システムの拡張
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/08/04 02:47 UTC 版)
「Glasgow Haskell Compiler」の記事における「型システムの拡張」の解説
表現力豊かな静的型付けは、Haskellの主な特徴の1つである。それ故に、言語拡張の作業の多くは型と型クラスに向けたものになっている。 GHCはSystem FCに基づいた拡張型システムに対応している。主な型システムの拡張は以下の通りである。 任意ランクと非可述的多相性。本質的には、多相関数またはデータ型コンストラクタは、引数の1つが多相であることを必要とする場合がある。 一般化代数的データ型。多相データ型の各コンストラクタは、結果の型に情報をエンコードすることができる。この型でパターンマッチを行う関数は、コンストラクタごとの型情報に基づいて、データに対してより具体的な操作を行うことができる。 存在型は、一部のデータとそのデータの操作を束ねて、基礎となるデータのデータ型を隠蔽して操作することができる。このような値は、オブジェクト指向プログラミングのオブジェクトと非常に似たものである。 値を含まないデータ型。この機能は型レベルのメタプログラミングでデータを表現するときに便利である。 型族(英語版)は、型から型へのユーザー定義関数である。パラメータ多相は各型のインスタンス化に同じ構造を提供するが、型族はインスタンス間で異なる実装によりアドホック多相を提供する。ユースケースには、内容に応じたコンテナの最適化と、型レベルのメタプログラミングが含まれている。 動的スコープを持つ暗黙的な関数パラメータ。これは型クラスの制約と同様に、型で表現される。 型クラスに関する拡張は以下の通りである。 型クラスは複数の型によってパラメータ化することができる。従って、型クラスは型の組だけでなく、n-項関係を記述することができる。 関数従属性は、その部分の関係を型の数学的関数に制約する。つまり、ある型タイプの一方のパラメータが固定されると、もう一方のパラメータが完全に決定するように束縛が指定される。これは曖昧さがある状況で型推論ができる方法を案内する。 型クラスのインスタンスの許容できる形状に関するルールを大幅に緩めた。これが全て有効なとき、型クラスシステムはコンパイル時に論理プログラミング向けのチューリング完全な言語となる。 型族は型クラスに関連付けることができる。 確実な型クラスのインスタンスの自動生成は、幾つかの方法で拡張されている。ジェネリックプログラミングと一般再帰パターン向けの新たな型クラスに対応している。更に、新しい型が既存の型と同じであると宣言された場合、基の型に対して宣言された型クラスのインスタンスは、空の新しい型に昇格する可能性がある。
※この「型システムの拡張」の解説は、「Glasgow Haskell Compiler」の解説の一部です。
「型システムの拡張」を含む「Glasgow Haskell Compiler」の記事については、「Glasgow Haskell Compiler」の概要を参照ください。
- 型システムの拡張のページへのリンク