gpt4 book ai didi

Haskell -- 从具体类型实例中获取 TypeRep

转载 作者:行者123 更新时间:2023-12-04 01:52:38 24 4
gpt4 key购买 nike

我想用这种类型签名写一个函数:

getTypeRep :: Typeable a => t a -> TypeRep

其中 TypeRep 将是 a 的类型表示,而不是 t a 的类型表示。也就是说,编译器应该在任何调用站点 [to getTypeRep] 自动返回正确的类型表示,这将具有 a.

为了添加一些上下文,我想创建一个“动态类型”数据类型,它会记住顶级类型,但不会记住它的参数。例如,我想将 MyClass a 转换为 Dynamic MyClass,上面的函数将用于创建 Dynamic MyClass 的实例,该实例存储类型参数 a 的表示形式。

最佳答案

那么,如何使用作用域类型变量来选择内部组件:

{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}

import Data.Dynamic
import Data.Typeable

getTypeRep :: forall t a . Typeable a => t a -> TypeRep
getTypeRep _ = typeOf (undefined :: a)

为我工作:
*Main> getTypeRep (Just ())
()
*Main> getTypeRep (Just 7)
Integer
*Main> getTypeRep ([True])
Bool

有趣的设计。

关于Haskell -- 从具体类型实例中获取 TypeRep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924539/

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