2

Data.Dynamics を他の sにマップしたいData.Dynamic。でも、書けない

Map Dynamic Dynamic

がないからOrd Dynamicです。Dynamic解決策はありますか (関数が物事toDynのみを受け入れOrd、ボクシング時に型クラスを具体化するバージョンのようなものですか?)

これの動機は、EDSL コンパイラー内の変数 --> 値からのマップを持つことです。(明らかに、変数は異なる型を持つことができます)。 編集:申し訳ありませんが、この問題には必要ありません。変数名をキーとして保存できます/保存する必要があります。しかし、私はまだ質問に興味があります。

前もって感謝します!!

4

2 に答える 2

7

いいえ、仕方がありません。作成に関与するタイプによってはDynamicあり得ません。不純になりたい場合は を使用できますがStablePtr、それが私が考えることができる最高のものです。

しかし、toDyn のタイプを Ord を含むように変更することで、これを行うことができます。

于 2012-05-02T22:09:00.987 に答える
5

誰かが興味を持っているなら、私は解決策をハックしました。それは少しトリッキー/楽しいです:)

コードはこちら: http://pastebin.com/KiJqqmpj .

Typeable1(また、高階型用に 1 つも作成しました。これにより、常に同じ高階型関数がある場合は、を作成する必要がなくなります: 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)

ちょっとテスト、

*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 に答える