我已經開始使用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]
而不是任何數字類型,因此我放棄了該類型的通用性。
我的問題是:是否有任何方式來表達通用性(例如使用類型calsses)到新類型的定義。類似的東西:
type Vector = (Num a) => [a]
或者其他任何方式來保持我的Vector
的通用性?
即使你可以做你想做的事情,因爲'a'不是一個具體類型,你仍然不得不將'Vector'變成一個**類型的構造函數**'Vector a' ..就像你不能擁有'Maybe = Nothing |只是一個'。 'Maybe'是一個類型構造函數,'Maybe Int'是一個類型。 –