GHCi环境转储

时间:2011-11-09 15:35:04

标签: haskell ghci

GHCi中是否有办法基本上获得州转储?我的意思是列表:

  • 所有已加载的运算符及其优先级,关联性和签名。
  • 所有已加载的课程。
  • 所有已加载的数据,类型和新类型以及它们所属的类。
  • 所有已加载的函数及其签名,以及它们所属的类。

假设这是可能的,是否也可以在运行时执行此操作,例如在异常期间?

2 个答案:

答案 0 :(得分:4)

:browse会为您提供大部分信息。它显示

  • 为函数和运算符键入签名。
  • 课程及其方法。
  • 数据类型,新类型和类型同义词,如果它们在范围内,则带有构造函数。

没有任何参数,它显示当前加载的模块的此信息。您还可以指定其他模块。

Prelude> :browse Control.Applicative
class (Functor f) => Applicative f where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b
  (*>) :: f a -> f b -> f b
  (<*) :: f a -> f b -> f a
...

要查看更多详细信息,包括运算符的优先级和关联性,以及数据类型的实例,请使用:info

Prelude> :info (^)
(^) :: (Num a, Integral b) => a -> b -> a   -- Defined in GHC.Real
infixr 8 ^
Prelude> :info Bool
data Bool = False | True    -- Defined in GHC.Bool
instance Bounded Bool -- Defined in GHC.Enum
instance Enum Bool -- Defined in GHC.Enum
instance Eq Bool -- Defined in GHC.Base
instance Ord Bool -- Defined in GHC.Base
instance Read Bool -- Defined in GHC.Read

调试时也可以使用这些命令。

有关详细信息,请键入:help或查看the GHCi chapter of the GHC user's guide

答案 1 :(得分:1)

有获取此信息的方法。问题是,据我所知,没有办法按照你想要的方式过滤它,但无论如何它是:

  • 如果要查看当前在ghci中定义的所有标识符,包括类,运算符,构造函数和类型,只需在光标位于空格上时按Tab键。

  • 如果您想知道运营商*的优先级和关联性,请使用

    :i *
    
  • 如果您想查看哪些类M只是使用

    的实例
    :i M
    
  • 如果您想查看函数f的签名,请使用

    :i f
    

    如果您编写:set -fbreak-on-exception,那么当抛出异常时ghci会中断然后失败,然后您可以在异常期间使用上述所有命令。