gat*_*ado 2 haskell map dynamictype
我想将Data.Dynamics 映射到其他Data.Dynamics.但是,我不能写
Map Dynamic Dynamic
Run Code Online (Sandbox Code Playgroud)
因为没有Ord Dynamic.有没有任何解决方案(比如Dynamic其toDyn功能只接受Ord事物的版本,并在拳击时提升类型类?)
这样做的动机是从EDSL编译器中的变量 - >值中获取一个映射.(显然,变量可以有不同的类型). 编辑:对不起,这个问题没有必要,我可以/应该只将变量名存储为密钥.但是,我仍然对这个问题感兴趣.
提前致谢!!
不,没有办法.通过创造所涉及的类型Dynamic不可能.如果你想变得不纯洁,你可以使用StablePtr,但这是我能想到的最好的.
但是通过将toDyn的类型更改为包含Ord,可以完成.
如果有人有兴趣,我会破解一个解决方案; 这有点棘手/有趣:)
代码在这里:http://pastebin.com/KiJqqmpj.
(我还为高阶类型编写了一个Typeable1,如果你总是拥有相同的高阶类型函数,它可以节省你编写的需要:http://pastebin.com/aqjwFv9p.在某些情况下,编写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)
Run Code Online (Sandbox Code Playgroud)
一点点测试,
*OrdDynamic> int1 == int1
True
*OrdDynamic> int2 == int2
True
*OrdDynamic> int1 < int2
True
*OrdDynamic> int2 < float1
False
*OrdDynamic> float1 < int2
True
*OrdDynamic> int1 == float1
False
Run Code Online (Sandbox Code Playgroud)