2

我想象这样的事情:

def combine[A, B, C](f: (A, B) => C): (M[A], M[B]) => M[C]

虽然MFunction0。这在scalaz中可能吗?

4

2 回答 2

1
import scalaz._; import Scalaz._

def combine[A, B, C, M: Applicative](f: (A, B) => C) = 
   (ma: M[A], mb: M[B]) => (ma |@| mb)(f)
于 2011-06-23T19:17:03.223 回答
0

在标准 scala 中并不难,只需坚持您的签名:

def combine[A,B,C]( f: (A,B) => C ) 
  = ( fA:(()=>A), fB:(()=>B) ) => f( fA(), fB() )

这是一个小例子:

scala> val isProdPositive = combine( (i:Int,d:Double) => i*d > 0.0 )
  isProdPositive: (() => Int, () => Double) => Boolean = <function2>

scala> val f1 = () => 2
  f1: () => Int = <function0>

scala> val f2 = () => -1.5
  f2: () => Double = <function0>

scala> isProdPositive(f1,f2)
  res1: Boolean = false
于 2011-06-24T07:04:32.263 回答