我想将UArray
视为Functor
的实例。我想写一个数字代码,我需要使用比Array
更有效的东西来表示状态(说明分析器)。我知道我可以在不使用仿函数的情况下编写代码,但我认为仿函数是我非常有价值的抽象概念。
按原样这不起作用,因为UArray
只是某些基本类型IArray
或Int
的{{1}}个实例。我正在考虑两种让它继续工作的方法:
Double
的结果不是fmap
IArray
(如果可能)或基于UArray
(如果不是),类似于C ++模板专业化我尝试过基于各种GHC扩展的各种方法(存在类型,函数依赖,广义代数数据类型,多参数类型类,不可判断的实例),但我无法使事情发挥作用。我总是到达一个我需要向编译器承诺“是的,结果可以通过Array
表示”的点,但是它没有语法。
我已经阅读了上面GHC扩展的各种论文,教程和文档,希望找到一个告诉我如何做到这一点的例子。我能找到的最接近的是https://wiki.haskell.org/GADTs_for_dummies,它定义了一个非常接近我可能需要的类UArray
。
你能给我一个如何开始的指针吗?