我想编写一个具有这种类型签名的函数:
getTypeRep :: Typeable a => t a -> TypeRep
其中 TypeRep 将是类型表示a, 不是为了t a。也就是说,编译器应该在任何调用站点自动返回正确的类型表示[to获取类型代表],其中将有具体类型a.
为了添加一些上下文,我想创建一个“动态类型”数据类型,其特点是它将记住顶级类型,但不记住其参数。例如我想转我的A班 into 动态我的班级,上面的函数将用于创建实例动态我的班级存储类型参数的表示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
有趣的设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)