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

时间:2019-02-28 08:22:10

标签: haskell dynamic reflection

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

我的第一个困难是我需要拥有一个Typeable函数。但这不起作用:

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

toDyn createMaybe

无法使用No instance for (Typeable a0) arising from a use of ‘toDyn’

进行编译

是否有解决方法?

1 个答案:

答案 0 :(得分:1)

正如the docs for Data.Dynamic所说,

  

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

也许您正在寻找以下内容之一?

toDynJust :: Typeable a => a -> Dynamic
toDynJust = toDyn . Just

还是内置的fromDynamic :: Typeable a => Dynamic -> Maybe a

也许,如果您揭示了更多您想做的事情,而不是您想如何做,那么最好能说出这是否是正确的方法。 :-)