2

我想将Data.Dynamics 映射到其他Data.Dynamics。但是,我不会写

Map Dynamic Dynamic

因为没有Ord Dynamic。是否有任何解决方案(例如DynamictoDyn功能仅接受Ord事物并在装箱时具体化类型类的版本?)

这样做的动机是在 EDSL 编译器中拥有来自变量 --> 值的映射。(显然变量可以有不同的类型)。 编辑:对不起,这个问题没有必要,我可以/应该只将变量名存储为键。但是,我仍然对这个问题感兴趣。

提前致谢!!

4

2 回答 2

7

不,没有办法。由参与创造的类型Dynamic不可能存在。如果你想不纯,你可以使用StablePtr,但这是我能想到的最好的。

但是通过更改 toDyn 的类型以包含 Ord 可以完成。

于 2012-05-02T22:09:00.987 回答
5

如果有人感兴趣,我破解了一个解决方案;这有点棘手/有趣:)

代码在这里: http: //pastebin.com/KiJqqmpj

(我还为高阶类型编写了一个Typeable1,如果您始终具有相同的高阶类型函数,则无需编写难的。)Typeable1

一些价值观:

float1 = mk_ord_dyn (1 :: Float)
float2 = mk_ord_dyn (2 :: Float)
int1 = mk_ord_dyn (1 :: Int)
int2 = mk_ord_dyn (2 :: Int)

一个小测试,

*OrdDynamic> int1 == int1
True
*OrdDynamic> int2 == int2
True
*OrdDynamic> int1 < int2
True
*OrdDynamic> int2 < float1
False
*OrdDynamic> float1 < int2
True
*OrdDynamic> int1 == float1
False
于 2012-05-02T22:36:54.667 回答