我已经尝试过
map show . mapMaybe fromDynamic $ [toDyn "one", toDyn (\x -> x::Integer), toDyn 3, toDyn ()]
但它返回了
["()"]
最佳答案
问题在于 fromDynamic
必须转为单态类型。它正在选择 ()
,但是通过类型签名,您可以让它选择任何其他类型。
为了展示它,您需要一些函数来依次尝试所有可能的类型。也许您不想这样存储数据,而是希望将其与某些操作(例如显示)捆绑在一起存储。
有两种捆绑方式。我最喜欢的是将所有函数预先应用于该值(因此为了显示,您只需获得 String
类型的 thunk 列表)。
另一种方法是将函数也放入Dynamic
中(确保它们是正确的单态类型!),然后使用dynApply
。
关于Haskell:显示 Hlist 上所有 "showable"的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695894/