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]
添加一行代码,我希望将它们包含在注册表中: