在 Write this Scala Matrix multiplication in Haskell 上的冗长讨论之后,我想知道......类型安全的矩阵乘法会是什么样子?所以这是你的挑战:要么链接到 Haskell 实现,要么自己实现以下内容:
data Matrix ... = ...
matrixMult :: Matrix ... -> Matrix ... -> Matrix ...
matrixMult ... = ...
在哪里
matrixMult
如果您尝试将两个具有不兼容维度的矩阵相乘,则会在编译时产生类型错误。如果你链接到讨论这个精确主题的论文或书籍,和/或讨论你自己这个功能的有用/无用,Brownie 点。
最佳答案
有许多包可以实现这一点:
尤其是 Repa 论文对设计空间和做出的选择进行了非常好的讨论:http://repa.ouroborus.net/
具有历史意义的是 McBride 的 "Faking It"从 2001 年开始,它描述了强类型向量。他采用的技术与上述软件包中使用的技术非常相似。他们显然在从事依赖类型编程的圈子中广为人知,但我的印象是“Faking It”论文是在 Haskell 中使用这些的早期实例之一。奥列格的 2005 Monad Reader article on number-parameterized types 也对这些技术的历史进行了一些很好的讨论。
关于haskell - 类型安全的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332392/