2011-03-16 2 views
8

입력 문제로 인해 스칼라에 작은 문제가 있습니다. 하스켈, 나는이 작업을 수행 할 수 있습니다스칼라 입력 : 숫자 형식을 확인하는 방법

:

add :: (Num a) => (a,a) -> (a,a) -> (a,a) 

그런 식으로, 나는 add에 숫자이고 지원 + 등 나는 스칼라 클래스에 대해 동일합니다, 그래서 같은 모든 유형을 던질 수

case class NumPair[A <: Numeric](x: A, y: A) 

하지만 작동하지 않는 것 같습니다. 이러한 작업이 가능하고, 보이는 유일한 특성은 Int 확장 할하지만 스칼라 문서로 인해, Numeric[T]이되고, Float

모든 팁은?

답변

11
case class NumPair[A](x:A, y:A)(implicit num:Numeric[A]) 

Numeric 인스턴스 자체 등 Int, Float, 연장되지 않고, 그것은 암시 물체로서 제공된다. 자세한 설명은 here을 참조하십시오.

+0

'내재적'을 좋아해야하는지 잘 모르겠다. 작업을 저장하려면 꽤 좋지만, 종종 유형 추론을 모호하게하여 타이핑 시스템을 파괴한다. – Lanbo

+1

어떤 식 으로든 형식 유추를 모호하게 만들 수 있습니까? - 원한다면'Numeric' 인스턴스를 명시 적 매개 변수로 만들 수 있습니다.하지만 항상 명시 적으로 전달해야합니다. 이는 'Int', 'Float' 등과 같은 유형에 대해 실제로 중복됩니다. implicits를 사용하면 명시 적으로 전달할지 여부를 선택하십시오. – Madoc

관련 문제