不知何故,我仍在尝试建立一种直觉,即我可以在 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
,但我的数据类型缺乏必要的结构。
是否有根本原因可能无法进行这种“提升”?