简单的问题。是否可以检查仅在函数中有效的变量的类型?
例如:
main = do
x <- something
如何检查x
的类型
我不能在ghci中执行:type x
,因为x
不是全局的。
发布于 2012-02-10 01:29:52
另一种方法(与RobAgar和hacky非常相似)是显式地为有问题的局部变量指定一些错误的类型,例如:
main = do
x <- getArgs
x :: () -- let's cast it to unit! ;)
print $ head x
然后ghci会给我们一个错误:
Couldn't match expected type `()' with actual type `[String]'
这表明"x“的实际类型是字符串。
发布于 2012-02-17 05:29:01
您可以使用GHCi调试器:
> 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
发布于 2012-02-09 19:59:45
没有简单的方法可以做到这一点。如果您的something
函数在全局作用域中,则可以检查该函数的类型。如果它真的在你的主函数中,那么它的类型将是IO SomeType
,其中SomeType
可能就是你要找的。
https://stackoverflow.com/questions/9210311
复制相似问题