Haskell 如何将动态多态函数应用于动态值?

Haskell 如何将动态多态函数应用于动态值?,haskell,dynamic,reflection,Haskell,Dynamic,Reflection,我想从函数中创建一个动态值,以便能够将其应用于toDyn(1::Int) 我的第一个困难是我需要一个可键入的函数。但是,这不起作用: createMaybe :: (Typeable a) => a -> Maybe a createMaybe = Just toDyn createMaybe 由于使用“toDyn”而导致(可键入a0)没有实例,因此编译失败。 有办法解决这个问题吗?如前所述 动态只能表示单态值;尝试从多态类型表达式创建类型为Dynamic的值将导致歧义错误(请参

我想从
函数中创建一个动态值,以便能够将其应用于
toDyn(1::Int)

我的第一个困难是我需要一个
可键入的
函数。但是,这不起作用:

createMaybe :: (Typeable a) => a -> Maybe a
createMaybe = Just

toDyn createMaybe
由于使用“toDyn”而导致(可键入a0)没有实例,因此编译失败。

有办法解决这个问题吗?

如前所述

动态
只能表示单态值;尝试从多态类型表达式创建类型为
Dynamic
的值将导致歧义错误(请参见
toDyn

也许你正在寻找类似以下的东西

toDynJust :: Typeable a => a -> Dynamic
toDynJust = toDyn . Just
还是内置的


也许,如果你透露了更多你想做的事情,而不是你想怎么做,你可以更好地判断这是否是正确的方法。:-)

上下文是在引擎盖下使用
动态
注册表
库:。可以向注册表中添加单态构造函数,例如,对于Hedgehog生成器,但这意味着我需要为每个
Gen(可能是a)
Gen[a]
添加一行代码,我希望将它们包含在注册表中: