2012-10-06 9 views

답변

7

당신은 클래스 자체에 대한 형식 매개 변수를 의미하는 경우, 당신은 클래스 정의의 문맥에 제약 조건을 추가 할 수 있습니다 : 그것은 외설 함수의 유형의 매개 변수 인 경우에, 다른 한편으로

class (Num a) => Foo a where 
    -- stuff 

't에게 클래스 매개 변수는, 당신은 일반적인 방식으로 제약 조건을 추가 할 수 있습니다

class Foo a where 
    foo :: (Num b) => a -> b -> b 

당신이 특정 특정 유형을 제한 할 경우 해당 정말 불가능 - 유형 클래스 "열기"이다, 즉, 인스턴스를 항상 추가 할 수 있습니다. 당신이 할 수있는 최선의 방법은 자신의 클래스 (FooNumbers 또는 그와 같은 것)를 가지고, 원하는 인스턴스만을 작성한 다음, Num 대신에 그것을 요구해야합니다. 그러나 그것은 일반적으로 도움이되지 않습니다.

+0

마지막 경고는 클래스 (Num a) => 옵션에 대한 경고입니까? –

+0

@peroni_santo : 아니요, "Num' 인스턴스가있는 것"대신에 소수의 특정 유형으로 만 제한하려고합니다. 코드에서 제공 한 두 예제 모두 괜찮습니다. –

관련 문제