【发布时间】:2021-04-15 09:36:03
【问题描述】:
我有
data D t = ...
data SomeStuff = forall a (Typeable a, ...) => SomeStuff a
在某个时候,我得到一个 SomeStuff,我想尝试将其内部 a 转换为 D t(其中 t 可以是 any 类型,我只感兴趣在D 部分)。 (在伪 Haskell 中)看起来像:
case someStuff of
SomeStuff (_ :: a) -> case eqT :: Maybe (a :~: (exists t. D t)) of
Just Refl -> -- proven that `exists t. a ~ D t`
Nothing -> -- nothing to do here
我一直在摆弄Data.Type.Equality 和Type.Reflection(如应用程序等),但我无法让它工作。有人有办法吗?
【问题讨论】:
-
问题是
t可以是任何东西。我无法将其限制在()这样的类型上。 -
根据答案,我可能完全弄错了问题 - 抱歉