gpt4 book ai didi

haskell - 我可以在运行时区分类型类实例吗?

转载 作者:行者123 更新时间:2023-12-04 13:23:38 25 4
gpt4 key购买 nike

是否可以按如下方式实现类型类:

class SomeClass e where
isEq :: (SomeClass e') => e -> e' -> Bool

在哪里 isEq x y将在 x 时返回 true和 y都是这个类型类的同一个实例吗?

上下文:这是进行运行时类型测试的隐蔽尝试。起初我读到 Haskell 具有类型删除功能,但我也读到了最近对 GHC 的扩展,其中包含一些运行时信息。

编辑:对于那些想知道我的用例的人......我一直在使用类型级编程来确保我的一些 ADT 的某些属性,即涉及资源使用。这些资源由不同的类型表示(资源锁相应地在类型级别实现)。

我正在尝试编写一个需要识别资源写入/读取的优化过程。但是由于我的所有资源都由不同的单例表示,其唯一的共同因素(除了所有值都是底部)是将它们组合在一起的类型类。

简而言之,我想在运行时值级别使用我的类型级别编程的结果。

最佳答案

正如 Karolis Juodelė 所暗示的那样,您可以使用 Data.Typeable 来执行此操作:

Prelude Data.Typeable> :{
Prelude Data.Typeable| let isEq :: (Typeable a , Typeable b) => a -> b -> Bool
Prelude Data.Typeable| isEq x y = typeOf x == typeOf y
Prelude Data.Typeable| :}
Prelude Data.Typeable> isEq True ()
False
Prelude Data.Typeable> isEq True False
True

问题是:为什么你在运行时不知道类型是什么,然后你为什么要关心它们是否相等——你能详细说明你的用例吗?

关于haskell - 我可以在运行时区分类型类实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14497069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com