Haskell中是否有一个函数返回其参数的类型(或显示类型的字符串)?

Rus*_*ott 6 haskell

是否有一个可以在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)


Joa*_*ner 8

这不是Haskell程序员通常想要或需要的东西.所以,如果你想要这个功能,你就会做一些不寻常的事情.这可能是因为你是初学者并且仍然习惯于在Haskell中编程(在这种情况下 - 你想要实现什么?).或者你不是初学者,想要尝试不寻常的功能(在这种情况下 - 阅读).

  • 如果您正在寻找一个带有a的函数,将其String解释为Haskell术语类型 - 检查它并为您提供其字符串,那么您可以在程序中嵌入Haskell编译器.看一下提示库.

  • 如果您处于多态上下文中并希望(可能是为了调试)知道某个类型变量a绑定的Typeable类型,那么类型类可以为您提供此信息:show (typeOf x)为您提供该术语引用的值的具体类型x.您可能必须为Typeable a多态函数添加约束.