2011-12-16 4 views
14

물론 그 구조에 대해 Hashable 인스턴스가 없음을 발견했습니다. 글을 쓰는 것이 쉽지 않기 때문에 괜찮습니다. GHCi에서 인스턴스 선언을 추가 할 수 있습니까 <code>HashMap</code>으로 장난하고 있었고 <code>Data.Bson.ObjectId</code>을 키로 사용하려고 시도했습니다.

instance Hashable ObjectId where hash (Oid x y) = hash (x,y) 

1

나는 GHCi에 그 라인을 입력하고 "입력 '예'에 구문 분석 오류"들었다. GHCi 프롬프트가 IO 모나드에서 do 블록으로 타이핑되고 인스턴스가이 컨텍스트에서 정의 될 수없는 것처럼 작동하는 것처럼 실제로 의미가 있습니다.

질문이 있으시면 GHCi에서 새 인스턴스를 정의 할 수있는 방법이 있습니까? 이 인스턴스가 라이브러리에 의해 제공되지 않는 이유는


1

는 또 다른 문제이다. 대답은 의존 관계를 제한하는 것이고 bson 패키지는 이미 태양 아래있는 모든 것에 의존한다는 것을 제외하고는 믿을 것입니다.

답변

14

좋은 소식 : 예, GHCi 내에서 새로운 인스턴스를 정의하는 방법이있다.

나쁜 소식 : 지금은 첫 번째 단계는 "GHC의 개발 스냅 샷 설치"입니다.

GHCi에서 상당 기간 동안 기능이 누락되었습니다. 그것이 존재하지 않아도되는 본래의 이유는 없었지만 구현하기가 다소 어려웠다 고 가정 했으므로 따로 설정했습니다. GHCi에서

당신은 또한 데이터, 유형, newtype은, 클래스, 예, 파생, 해외 선언을 포함한 모든 최상위 하스켈 선언을 입력 할 수 프롬프트 :

그러나 as of version 7.4.1, it's now available 것으로 보인다. 예를 들어 :

Prelude> data T = A | B | C deriving (Eq, Ord, Show, Enum) 
Prelude> [A ..] 
[A,B,C] 
Prelude> :i T 
data T = A | B | C  -- Defined at <interactive>:2:6 
instance Enum T -- Defined at <interactive>:2:45 
instance Eq T -- Defined at <interactive>:2:30 
instance Ord T -- Defined at <interactive>:2:34 
instance Show T -- Defined at <interactive>:2:39 

당신은 지금 가치 GHC의 비 릴리스 버전을 설치하는 번거 로움이 당신에게 달려 있다는 데 생각하든.