如果这个问题有点模糊,请事先道歉。这是一些周末白日梦的结果。在Haskell中生成Haskell类型的设备(“second order Haskell”)?
使用Haskell的精彩类型系统,将数学(特别是代数)结构表示为类型类是令人高兴的。我的意思是,只要看看numeric-prelude!但是,在实践中利用这种美妙的类型结构对我来说似乎总是很困难。
你必须表达该v1
和v2
是向量空间V
的元素和w
是向量空间W
的一个元件的一个很好的,类型系统的方法。类型系统允许您编写一个程序,添加v1
和v2
,但不包括v1
和w
。大!但在实践中,您可能想要使用潜在的数百个矢量空间,并且您当然不想创建类型V1
,V2
,...,V100
并将它们声明为向量空间类型类的实例!或者,也许你从现实世界中读取了一些数据,导致符号为a
,b
和c
- 您可能想要表示这些符号上的自由矢量空间确实是一个向量空间!
所以你卡住了吧?为了在科学计算设置中执行很多你想要处理矢量空间的事情,你必须放弃你的类型系统,方法是先向量空间类型类别,然后让函数执行运行时兼容性检查。你应该吗?难道不可能使用Haskell纯粹的功能来编写一个程序来生成所需的所有类型,并将它们插入到真正的程序中吗?这种技术是否存在?通过一切手段指出,如果我只是在这里忽略一些基本的东西(我可能是):-)
编辑:刚才我发现fundeps。我将不得不考虑他们与我的问题有何关系(有关这方面的启发性评论,我们将不胜感激)。
这很有趣!谢谢! – gspr 2010-11-01 09:51:20