0
object JSONSourceLoaderUtil
にオーバーロードされたメソッドを使用する代わりに、パターンマッチングスタイルに切り替える必要があります。 Try[JValue]
とFuture[JValue]
の結果をF[JValue]
として処理するにはどうすればよいですか?私はパターンマッチングスタイルに変換するにはどうすればよい一般的なコンテナとしての試行または未来
インポートおよびケースクラス、私が今持っている何
import scalaz._
import Scalaz._
import org.json4s.JsonAST.{JObject, JValue}
trait DataSource
case class LocalFile(input: File) extends DataSource
case class RemoteResource(url: String, req: JValue) extends DataSource
、
object JSONSourceLoaderUtil {
def jsonFrom[F[_], S <: DataSource](source: S)(f: S => F[JValue])(implicit ev: Monad[F]): F[JValue] = ev.bind(ev.point(source))(f)
def extractFrom(source: RemoteResource): Future[JValue] = {
Future(...).flatMap(input => Future.fromTry(Parser.parseFromChannel(Channels.newChannel(input))))
}
def extractFrom(source: LocalFile): Try[JValue] = Parser.parseFromFile(source.input)
}
?コーナーに自分を描いた場合、これを行う別の方法はありますか?ありがとう。
object JSONSourceLoaderUtil {
def jsonFrom[F[_], S <: DataSource](source: S)(f: S => F[JValue])(implicit ev: Monad[F]): F[JValue] = ev.bind(ev.point(source))(f)
def extractFrom(source: DataSource): F[JValue] = source match {
case RemoteResource(url, request) => Future(...)
.flatMap(input => Future.fromTry(Parser.parseFromChannel(Channels.newChannel(input))))) // cannot convert Future to F
case LocalFile(input) => Parser.parseFromFile(input) // cannot convert Try to F
}
}
私は2番目の解決策を見つけましたが、コンパイルできませんでした。私はそれがコンパイラのバグであることをどのように知っていたでしょうか?どうもありがとう。私はフォローアップqを持っています。第1の解決策 "OO"は(私は間違った言葉を使うことができる)だろうか?たとえば、私はこのソリューションをhaskellに変換できません。 – thlim
さて、ScalaはHaskellではありません。特に、この特定のパターン(GADT)のサポートは限られています。 –