首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查局部变量的类型?

如何检查局部变量的类型?
EN

Stack Overflow用户
提问于 2012-02-09 19:48:43
回答 5查看 1.1K关注 0票数 18

简单的问题。是否可以检查仅在函数中有效的变量的类型?

例如:

代码语言:javascript
复制
main = do
       x <- something

如何检查x的类型

我不能在ghci中执行:type x,因为x不是全局的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-10 01:29:52

另一种方法(与RobAgar和hacky非常相似)是显式地为有问题的局部变量指定一些错误的类型,例如:

代码语言:javascript
复制
main = do
  x <- getArgs
  x :: () -- let's cast it to unit! ;)
  print $ head x

然后ghci会给我们一个错误:

代码语言:javascript
复制
Couldn't match expected type `()' with actual type `[String]'

这表明"x“的实际类型是字符串。

票数 13
EN

Stack Overflow用户

发布于 2012-02-17 05:29:01

您可以使用GHCi调试器:

代码语言:javascript
复制
> ghci a.hs
GHCi, version 7.0.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main             ( a.hs, interpreted )
Ok, modules loaded: Main.
*Main> :break 4
Breakpoint 0 activated at a.hs:4:8-14
*Main> :main
Stopped at a.hs:4:8-14
_result :: IO String = _
[a.hs:4:8-14] *Main> :list
3  main = do
4    x <- getLine
          ^^^^^^^
5    return x
[a.hs:4:8-14] *Main> :step
asd
Stopped at a.hs:5:3-10
_result :: IO String = _
x :: String = _
[a.hs:5:3-10] *Main> :t x
x :: String
票数 6
EN

Stack Overflow用户

发布于 2012-02-09 19:59:45

没有简单的方法可以做到这一点。如果您的something函数在全局作用域中,则可以检查该函数的类型。如果它真的在你的主函数中,那么它的类型将是IO SomeType,其中SomeType可能就是你要找的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9210311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档