Haskell:显示 Hlist 上所有 "showable"的元素

标签 haskell reflection hlist

我已经尝试过

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/

相关文章:

haskell - 编译器不会为多态常量值选择类型类

Haskell 从文件中读取 Map

java - 如何使用反射获取注解类名、属性值

c# - 为什么 `Assembly` 和 `Module` 没有公开定义的构造函数?

haskell - 使用通用函数映射异构数据结构

haskell - cabal-install 1.20.0.0 无法在 OS X 上安装

Haskell 箭头延迟函数

java - 通过反射调用具有 Class<T> 类型参数的私有(private)方法

scala - Shapeless: 试图通过类型来限制 HList 元素

scala - foldRight 过滤的 HList 不提供实例