2011-09-21 6 views
5

저는 먼저 스카 이즈로 기존 클래스를 변환하여 모노oid 형질을 사용합니다. 내가 달성하려고하는 것은 암시 적으로 Monoid로 변환 될 수있는 유형에서만 사용할 수 있도록 클래스 유형 매개 변수에 바인딩 된 뷰를 설정하는 것입니다. 내 (간체) 클래스 정의는 따라서이다 :이 간단한 예제를 컴파일스칼라즈로 뷰 경계를 사용하기

import scalaz._ 
import Scalaz._ 

case class Foo[T <% Monoid[T]](v: T) 

new Foo(42) 

컴파일러 오류를 제공합니다

error: No implicit view available from Int => scalaz.Monoid[Int]. 

이전 바인딩이보기에 T에서 암시 적 변환과 내 자신의 사용자 정의 특성에 대해 정의 된 형질과 이것이 잘 돌아갔다.

내가 스카 파로 변환 한 것은 무엇입니까?

덕분에, 크리스

답변

9

님의 바운드 상황, 그리고 거기에 바인딩 된 뷰를 사용하는 것으로 가정된다.

import scalaz._ 
import Scalaz._ 

case class Foo[T : Monoid](v: T) 

new Foo(42) 

T : Monoid 표기 범위 형 Monoid[T] 내재적 존재한다는 것을 의미한다.

case class Foo[T](v: T)(implicit ev: Monoid[T]) 

이이 유형의 클래스 패턴으로 알려져 있으며, 당신은 그것을 here에 대한 자세한 내용을보실 수 있습니다 : 사실, 그것은 다음에 desugars.

+0

브릴리언트. 당신의 도움을 주셔서 감사합니다. 그것이 명백한 무엇인가 알았습니다. 링크를 가져 주셔서 감사합니다. –

관련 문제