0

不知何故,我仍在尝试建立一种直觉,即我可以在 Haskell 中表达什么,什么不能表达。

我有自己的(简单)矩阵类型,我想知道是否有可能以某种方式将其“提升”到一个函数中,以便理解应用于向量的矩阵的常用数学符号。

让我更详细地解释这个问题。

data Matrix a = M [[a]] deriving (Show,...)

dot u v = foldr (+) 0 $ zipWith (*) u v

mv :: Num a => Matrix a -> [a] -> [a]
mv (M []) _ = []
mv _ [] = []
mv (M m) v = dot (head m) v : mv (M (tail m)) v

显然,该函数mv实现了矩阵M m对类型“向量”的作用[a]

(M' m) v但是,有没有办法用这样的语法来实现相同的操作

(M' m) v = mv (M m ) v ?

然后它应该允许写类似的东西

m = M' [[2,3],[5,7]]
v = m [1,0] -- v == [2,5]

我怀疑我定义的矩阵数据类型不足以进行这样的提升。不知何故,我想我正在尝试从自定义矩阵类型到 some 找到一个函子hom([a],[a]),即向量空间类别中的态射集Vec,但我的数据类型缺乏必要的结构。

是否有根本原因可能无法进行这种“提升”?

4

0 回答 0