2013-08-18 5 views
9

ghci의 특정 유형에 대한 유형 정의를 볼 수있는 방법이 있습니까?특정 유형에 대한 ghci의 유형 정의 정의보기

instance Functor Maybe where 
    fmap f (Just x) = Just (f x) 
    fmap f Nothing = Nothing 

내가 ghci에서 볼 수있다 :

예를 들어, Maybe은 다음과 같이 정의된다? 위의 출력에서 ​​

Prelude> :i Maybe 
data Maybe a = Nothing | Just a  -- Defined in `Data.Maybe' 
instance Eq a => Eq (Maybe a) -- Defined in `Data.Maybe' 
instance Monad Maybe -- Defined in `Data.Maybe' 
instance Functor Maybe -- Defined in `Data.Maybe' 
instance Ord a => Ord (Maybe a) -- Defined in `Data.Maybe' 
instance Read a => Read (Maybe a) -- Defined in `GHC.Read' 
instance Show a => Show (Maybe a) -- Defined in `GHC.Show' 

, 나는 그것이 Functor에 대한 인스턴스로 Data.Maybe에 정의하는 방법을보고 싶어 : 나는 ghci에서 :info를 사용하는 경우,

는,이 얻을. 어쨌든 ghci에서 그것을 볼 수 있습니까?

답변

11

아니요, 가능하지 않습니다. 인스턴스가 아닌 모든 것이 가능합니다. GHC는 패키지의 컴파일 된 버전 만 등록하므로 소스 코드는 일반적으로 ghci에서 사용할 수 없습니다.

아마 가장 자주 Hackage에서 물건을 사용하고있을 것이다; 이 경우 해당 인스턴스의 소스 코드를 hoogling the module으로 찾아서 클래스 또는 데이터 선언을 찾은 다음 source을 클릭하는 것이 매우 간단합니다.

온라인으로 접속할 수 없거나 다른 이유로 인터넷에 접속할 수없는 경우 먼저 패키지 모듈이 포함되어 있는지 확인해야합니다. 가장 쉬운 방법은 그렇게 :

$ GHC-PKG 찾을 모듈 Data.Maybe
/usr/local/haskell/lib/ghc-7.6.2/package.conf.d
베이스 4.6 .0.1
haskell2010-1.1.1.0
~/.ghc/x86_64에-리눅스 7.6.2 내가 말한 그런 다음/package.conf.d

, GHC 모르는 소스 코드 실제로이 패키지가 시스템에 존재하지 않을 수도 있습니다! 그러나 cabal install과 함께 패키지를 설치 한 경우 (기본값) ~/.cabal/packages/hackage.haskell.org/PᴀᴄᴋᴀɢᴇNᴀᴍᴇ (압축 된 아카이브로 있지만 큰 장애물은 아닙니다)에 있습니다. 패키지 프로젝트 폴더 내에서 모듈 계층 구조를 나타내는 디렉토리 구조를 통해 모듈을 쉽게 찾을 수 있습니다.

예 : Data.Maybe (패키지 haskell2010)과 같은 다른 패키지는 GHC 설치와 함께 제공 될 수 있습니다. 하스켈 플랫폼. 이 경우 가장 쉬운 방법은 Haddock 설명서 파일을 검색하는 것입니다. 필자의 경우,

$ 찾기/usr/local/haskell -name 'Data-Maybe.html'| 머리 - n1 | xargs firefox

그러면 사용자가 친숙한 방식으로 소스 코드를 탐색 할 수있는 것과 유사한 호프가 열립니다.

+0

자신의 컴퓨터에서 ('cabal install; hoogle data') hoogle을 실행하는 것은 상당히 간단합니다. – aavogt

+0

@aavogt : 그렇습니다. 그러나 명령 줄 검색은 온라인 버전과 마찬가지로 haddock에 대한 좋은 링크를 제공하지 않습니다. 로컬 서버로 사용하는 것은 그리 간단하지 않습니다. – leftaroundabout

+1

'data double '과 같은 것을 찾고,'Num'를 따르기 위해'+'를 구현 한 경우,이 방법은 여전히 ​​소스 코드를 볼 방법을 제공하지 않습니다. Hoogle의 'Maybe'예는 소스와의 연결을 제공하지만 일반적으로 유형과 관련이 없습니다. – ely