2017-04-09 6 views

답변

4

예, 어떤 functor의 경우 F Cats는 사용자가 요청할 수있는 widen 구문 방법을 제공합니다. 이있는 경우 (예을 위해의 FEval 사용) 그래서 :

class Foo 
class Bar extends Foo 

import cats.Eval, cats.data.EitherT, cats.syntax.functor._ 

val eithertBar = EitherT[Eval, String, Bar](Eval.now(Right(new Bar))) 

이 쓸 수 있습니다 :

scala> eithertBar.widen[Foo] 
res0: cats.data.EitherT[cats.Eval,String,Foo] = EitherT(Now(Right([email protected]))) 

참고 그 F (예 : 표준 라이브러리 타입 생성자 인 경우 Option) 또는 기타 객체에 Functor 인스턴스가없는 다른 유형의 생성자의 경우 가져 오거나 그렇지 않으면 Functor을 제공해야합니다.