scalaz - Is providing explicitly the context bound possible in Scala? -


in following code:

   def sum[a: monoid](xs: list[a]): = {      val m = implicitly[monoid[a]]      xs.foldleft(m.mzero)(m.mappend)    } 

if have in scope monoid[int] has mappend = _ + _, can call function explicit monoid[int] has different behavior? or solution use more verbose syntax second argument implicit monoid: monoid[int]?


the code exemple comes scalaz tutorial: http://eed3si9n.com/learning-scalaz/sum+function.html

at end author shows exemple of providing explicitly monoid, didn't use context bounds:

scala> val multimonoid: monoid[int] = new monoid[int] {          def mappend(a: int, b: int): int = * b          def mzero: int = 1        } multimonoid: monoid[int] = $anon$1@48655fb6  scala> sum(list(1, 2, 3, 4))(multimonoid) res14: int = 24 

context bounds nothing more syntactic sugar. following:

def sum[a: monoid](xs: list[a]) 

is extactly same as:

def sum[a](xs: list[a])(implicit evidence: monoid[a]) 

this means regardless of way defined sum method (either context bound or implicit parameter), can explicitly pass implicit parameter in sum(list(1, 2, 3, 4))(multimonoid)


Comments

Popular posts from this blog

SPSS keyboard combination alters encoding -

Socket.connect doesn't throw exception in Android -

iphone - How do I keep MDScrollView from truncating my row headers and making my cells look bad? -