2012-01-17 2 views
2

Функция dynApply от Data.Dynamics выглядит очень красиво, но на самом деле она требует мономорфного типа функции. Итак, вы не смогли написатьлюбые обходные пути для получения полиморфных функций в Data.Dynamics?

dynApply (toDyn id) (toDyn 3) 

У меня есть код, который нуждается в полиморфных типах возврата. Они имеют ограниченную форму, например. Функции

forall t. (a -> t) -> t 
forall t. (a -> t) -> b -> t 
forall t. (a -> t) -> b -> c -> t 
... 

(где a, b, c являются конкретными типами). Заранее спасибо.

+0

Может список возможных типов возвращаемых переписываются (до полиморфного 'Т *, конечно)? –

+0

@ DanielWagner, этот подход может работать, спасибо, но я думаю, что это будет слишком много усилий, учитывая диапазон вещей [с разными экземплярами _t_], с которыми мне нужно будет применить их. – gatoatigrado

+0

Также я должен указать, что кто-то, похоже, работает над ним [http://hackage.haskell.org/trac/ghc/wiki/PolymorphicDynamic], но еще нет никакого кода. – gatoatigrado

ответ

3

Нет, полиморфные функции несовместимы с Data.Dynamic. Для этого потребуется полиморфный Data.Typeable и использование typechecker во время выполнения.

Существует, однако, билет для этой функции: Polymorphic Data.Dynamic

Смежные вопросы