2011-11-09 3 views
6

기본적으로 GHCi에서 상태 덤프를 얻는 방법이 있습니까? 이 말은 다음과 같은 목록을 의미합니다 :GHCi 환경 덤프

  • 로드 된 모든 연산자는 우선 순위, 연관성 및 서명과 함께 표시됩니다.
  • 로드 된 모든 클래스입니다.
  • 로드 된 모든 데이터, 유형 및 newtype은 인스턴스의 클래스와 함께로드됩니다.
  • 로드 된 함수는 모두 서명이며, 해당하는 경우 클래스에 속합니다.

이것이 가능하다고 가정 할 때, 예외 상황에서 런타임에이를 수행 할 수 있습니까?

답변

4

:browse이 정보를 대부분 제공합니다. 그것은 보여줍니다

  • 기능 및 운영자를위한 서명 유형.
  • 클래스와 메소드.
  • 데이터 유형, newtypes 및 유형 동의어가 범위 내에있는 경우 생성자를 사용하십시오.

인수없이 현재로드 된 모듈에 대한 정보를 표시합니다. 다른 모듈을 지정할 수도 있습니다.

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을 참조하십시오.

+0

모듈이 아닌 전체 시스템에 이와 같은 것을 원합니다. –

+2

@VansonSamuel :': browse * Module' 형식이 있습니다.이 모듈은 해당 모듈의 범위, 즉 모든 가져 오기와 그 내보내기에 대한 정보를 표시합니다. 아마도 그것은 당신이 필요로하는 것에 더 가깝습니다. – hammar

+0

나는 이것을 시험 할 것이다. 감사합니다. @ hammar 이것은 네가 나에게 도움을 준 네 번째 질문과 같다. :-) –

1

이 정보를 얻는 방법이 있습니다. 문제는 내가 아는 한, 정확하게 당신이 원하는 방식으로 필터링 방법이 없습니다, 것입니다,하지만, 어쨌든 여기있다 :

  • 당신은 클래스, 연산자를 포함한 모든 식별자를보고 싶다면

    , 현재 ghci에 정의되어있는 생성자와 유형은 공백에 커서가있을 때 탭을 누르기 만하면됩니다. 당신이 운영자 *의 우선 순위와 알고 싶다면 당신이보고 싶은 경우

  • 단지 어떤 클래스 M 것은 단지

    :i M 
    
  • 만약을 사용의 예입니다

    :i * 
    
  • 를 사용 당신은 함수의 서명을보고 싶다 f 그냥 사용

    :i f 
    

    :set -fbreak-on-exception을 쓰면 ghci가 중단되고 예외가 발생하면 실패하고 예외가 발생하면 위의 모든 명령을 사용할 수 있습니다.