是否有一个可以在Haskell程序中调用的函数,:t它以交互方式执行什么操作?或者这是Haskell无法做到的事情,因为它的类型没有意义.将类型名称作为String返回的函数怎么办?
Dan*_*ner 10
typeOf是这样做的规范方法.请注意,它不能(不能)处理多态性以及语言之外的工具.
Data.Typeable> typeOf ()
()
Data.Typeable> typeOf "hi"
[Char]
Data.Typeable> typeOf 3 -- hmmm....
Integer
Data.Typeable> typeOf id -- HMMMMMM...
<interactive>:4:1: error:
• No instance for (Typeable a0) arising from a use of ‘typeOf’
• In the expression: typeOf id
In an equation for ‘it’: it = typeOf id
Run Code Online (Sandbox Code Playgroud)
这不是Haskell程序员通常想要或需要的东西.所以,如果你想要这个功能,你就会做一些不寻常的事情.这可能是因为你是初学者并且仍然习惯于在Haskell中编程(在这种情况下 - 你想要实现什么?).或者你不是初学者,想要尝试不寻常的功能(在这种情况下 - 阅读).
如果您正在寻找一个带有a的函数,将其String解释为Haskell术语类型 - 检查它并为您提供其字符串,那么您可以在程序中嵌入Haskell编译器.看一下提示库.
如果您处于多态上下文中并希望(可能是为了调试)知道某个类型变量a绑定的Typeable类型,那么类型类可以为您提供此信息:show (typeOf x)为您提供该术语引用的值的具体类型x.您可能必须为Typeable a多态函数添加约束.