我已经开始使用 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
的通用性?