如果这个问题有点含糊,请提前道歉。这是一些周末白日梦的结果。
借助 Haskell 出色的类型系统,将数学(尤其是代数)结构表达为类型类非常令人愉快。我的意思是,看看numeric-prelude!但是在实践中利用这种奇妙的字体结构对我来说总是很困难。
您有一种很好的类型系统方式来表达它,v1
并且v2
是向量空间的元素,并且是向量空间V
的w
元素W
。类型系统允许您编写一个添加v1
and的程序v2
,但不能添加v1
and w
。伟大的!但在实践中,您可能想要使用可能有数百个向量空间,并且您当然不想创建类型V1
、V2
...、V100
并将它们声明为向量空间类型类的实例!或者,也许您从现实世界中读取了一些数据,从而产生了符号a
,b
并且c
-您可能想要表示这些符号上的自由向量空间确实是向量空间!
所以你被卡住了,对吧?为了在科学计算环境中做很多你想用向量空间做的事情,你必须放弃你的类型系统,先使用向量空间类型类,并让函数进行运行时兼容性检查。你应该这样做吗?难道不能利用 Haskell 是纯函数式的事实来编写一个程序来生成您需要的所有类型并将它们插入到实际程序中吗?这样的技术存在吗?一定要指出我是否只是在这里忽略了一些基本的东西(我可能是):-)
编辑:我刚刚发现fundeps。我将不得不考虑一下它们与我的问题的关系(对此有启发性的评论表示赞赏)。