私はHaskellで遊び始め、いくつかのチュートリアルと公式の本(lyah)を読みました。初めての個人的なプロジェクトを開始できると感じました。そして、私が選んだ新しい言語に関しては、線形代数処理 (行列、ベクトルなどの操作) 用のパッケージを実装したいと考えていました。関数は問題ありませんが、データ型については行き過ぎていません。
もともと、次のような関数がありました。
add_vect :: (Num a) => [a] -> [a] -> [a]
add_vect x y = zipWith (+) x y
ここで、意味に名前 ( Vector
) を付けたいので、次のようになります。[a]
vect_add
vect_add :: Vector -> Vector -> Vector
vect_add x y = zipWith (+) x y
多くの野心的な試みの後、私は ( の定義に触発されてString
) 非常に単純な定義にたどり着きました:
type Vector = [Int]
[Int]
これの問題は、数値型の代わりにのみ機能する関数の型ジェネリック性を失うことです。
私の質問は次のとおりです。新しい型の定義にジェネリック性を表現する方法はありますか (たとえば型呼び出しを使用)。次のようなもの:
type Vector = (Num a) => [a]
Vector
または、私のジェネリック性を維持する他の方法はありますか?