2012-01-01 5 views
4

하스켈의 GeneralizedNewtypeDeriving 메커니즘은 훌륭합니다. 자동으로 같은 인스턴스를 생성합니다GeneralizedNewtypeDeriving 인스턴스 중 하나 또는 두 가지 메소드를 사용자 정의하는 방법은 없습니까?

newtype SkewOptT α = SkewOptT (StateT Bool α) 
    deriving (Applicative, Functor, Monad, MonadTrans) 

같은 것을 쓰고, 그것을 볼 수없는 사람들을 위해

instance [overlap ok] Monad => Monad (SkewOptT) 

는하지만, 내 typeclasses 중 하나, 나는 몇 가지 방법을 사용자 정의 할 수 있습니다. 이러한 메서드에 대해 GeneralizedNewtypeDeriving이 수행하는 작업을 재정의하거나 사용하지 않도록 설정하는 방법이 있습니까? typeclass는 for (루프), parfor (병렬 루프), fcndef (새 함수 추가) 등과 같은 일부 기본 DSL 명령어를 인코딩하며, 여러 유형의 안경으로 분할하는 완벽한 방법은 아닙니다 [ 자동으로 하나를 파생시키고 다른 하나는 수동으로 작성합니다.

+0

[해당 문자는 무엇입니까?] (http://www.fileformat.info/info/unicode/char/d52a/index.htm)? – ehird

+1

@hird는 Fraktur 'm'과 알파를 닮았습니다. –

+0

아, 고마워. 뭔가 (비행기 관련, 나는 용의자가) 내가 그것을 검색했을 때 잘못되었을 것임에 틀림 없다. – ehird

답변

4

아니요, 불가능합니다. Default signatures (GHC 7.2의 새로운 기능)은 여기에서 클래스를 분리하는 데 도움이 될 수 있습니다. 다른 유형의 견지에서 메소드의 기본 구현을 정의 할 수 있으므로 일부 인스턴스를 파생시키고 다른 클래스의 인스턴스에서 대체하려는 메소드 만 채울 수 있습니다.

실제로 newtype 파생어는 ShowRead을 제외하고 몇 가지 전제 조건이 충족되는지 확인한 다음 사전을 직접 재사용합니다 (newtypes는 기본 유형과 동일한 표현을 사용하므로). 자세한 내용은 the documentation을 참조하십시오.

+0

기본 서명으로 할 수 있는지 잘 모르겠습니다. 기본 서명은 newtype에 대해 알지 못합니다. (기본 유형 등). 다행스럽게도 나중의 Haskell 반복에는 Data.Generics 나 Template Haskell을 잘 모르는 나 같은 사람들을 위해 더 쉽게 프로그램 할 수있는 유도 메커니즘이 있기를 바랍니다. – gatoatigrado

+2

GHC 7.2의 새로운 [generics mechanism] (http://www.haskell.org/ghc/docs/latest/html/users_guide/generic-programming.html) (기본 서명이 도입 된)을 사용 해본 적이 있습니까? – ehird