Haskell-types-and-type-class
Haskell-型と型クラス
Haskellは関数型言語であり、厳密に型指定されています。つまり、アプリケーション全体で使用されるデータ型は、コンパイル時にコンパイラーに認識されます。
組み込み型クラス
Haskellでは、すべてのステートメントは数式と見なされ、この式のカテゴリは Type と呼ばれます。 「タイプ」は、コンパイル時に使用される式のデータ型であると言えます。
Int
ここでは、関数* fType()のタイプを *int として設定しています。 この関数は2つの int 値を取り、1つの int 値を返します。 このコードをコンパイルして実行すると、次の出力が生成されます-
整数
整数*は *Int のスーパーセットと見なすことができます。 この値は任意の数に制限されていないため、整数の長さには制限がありません。 Int 型と Integer 型の基本的な違いを確認するには、次のように上記のコードを変更しましょう-
上記のコードをコンパイルすると、次のエラーメッセージがスローされます-
このエラーは、関数fType()が1つのInt型値を予期しており、実際の大きなInt型値を渡すために発生しました。 このエラーを回避するには、タイプ「Int」を「Integer」で変更し、違いを観察しましょう。
今、それは次の出力を生成します-
浮く
次のコードをご覧ください。 HaskellでのFloat型の動作を示しています-
この関数は、入力として2つの浮動小数点値を取り、出力として別の浮動小数点値を生成します。 このコードをコンパイルして実行すると、次の出力が生成されます-
ダブル
上記のコードを実行すると、次の出力が生成されます-
Bool
ここでは、変数 "x"をBoolとして定義し、別のブール値と比較してその独自性を確認しています。 それは次の出力を生成します-
Char
Charはキャラクターを表します。 一重引用符内のすべては、キャラクターと見なされます。 次のコードでは、Char値を受け入れ、出力としてChar値を返すように、以前の* fType()*関数を変更しました。
上記のコードは、 char 値 'v’で* fType()*関数を呼び出しますが、別のchar値、つまり 'K’を返します。 ここにその出力があります-
Haskellは型が宣言される前にその型をキャッチするのに十分なインテリジェントであるため、これらの型を明示的に使用しないことに注意してください。 このチュートリアルの以降の章では、異なる型とTypeクラスがHaskellを強く型付けされた言語にする方法を説明します。
EQタイプクラス
上記のすべての標準Typeクラスは、この EQ クラスの一部です。 上記の型のいずれかを使用して同等性をチェックするときはいつでも、実際には EQ 型クラスを呼び出しています。
次の例では、内部で「==」または「/=」操作を使用して EQ タイプを使用しています。
次の出力が得られます-
順序型クラス
このタイプクラスの「比較」機能を使用した例を以下に示します。
ここで、Haskellコンパイラは4が2以下かどうかをチェックします。 そうではないので、コードは次の出力を生成します-
Show
コンソールに次の出力が生成されます。 ここで、二重引用符は、文字列型の値であることを示しています。
Read
ここでは、ストリング変数( "12")を readInt メソッドに渡し、変換後に12(Int値)を返します。 ここにその出力があります-
Enum
次のコードは、12の後続値を見つける方法を示しています。
それは次の出力を生成します-
跳ねる
上限と下限を持つすべてのタイプは、このタイプクラスに属します。 たとえば、 Int タイプのデータには、「9223372036854775807」の上限と「-9223372036854775808」の下限があります。
次のコードは、HaskellがInt型の最大および最小境界を決定する方法を示しています。
それは次の出力を生成します-
次に、Char、Float、およびBool型の最大および最小境界を見つけてみてください。
Num
この型クラスは数値演算に使用されます。 Int、Integer、Float、Doubleなどの型は、このTypeクラスの下にあります。 次のコードを見てください-
それは次の出力を生成します-
積分
フローティング
Integralと同様に、FloatingもNum Typeクラスの一部ですが、浮動小数点数のみを保持します。 したがって、 Float と Double はこの型クラスの下にあります。
カスタムタイプクラス
他のプログラミング言語と同様に、Haskellでは開発者がユーザー定義型を定義できます。 次の例では、ユーザー定義型を作成して使用します。
ここでは、 Area という新しいタイプを作成しました。 次に、このタイプを使用して円の面積を計算しています。 上記の例では、「surface」は入力として Area を取り、出力として Float を生成する関数です。
ここで「データ」はキーワードであり、Haskellのすべてのユーザー定義型は常に大文字で始まることに注意してください。
それは次の出力を生成します-