Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 15:25
    jxnu-liguobin edited #9754
  • 15:16
    jxnu-liguobin synchronize #9754
  • 15:15
    jxnu-liguobin synchronize #9754
  • 15:13
    jxnu-liguobin synchronize #9754
  • 15:12
    jxnu-liguobin synchronize #9754
  • 14:54
    SethTisue labeled #9767
  • 14:54
    JurgisSi edited #2188
  • 14:53
    JurgisSi opened #2189
  • 14:51
    JurgisSi opened #2188
  • 14:48
    scala-jenkins milestoned #9767
  • 14:48
    mrdziuban opened #9767
  • 13:43
    SethTisue commented #9764
  • 07:40
    lrytz commented #9764
  • 03:05
    jxnu-liguobin review_requested #9754
  • 02:54
    jxnu-liguobin commented #9765
  • 02:24
    jxnu-liguobin commented #9765
  • Sep 22 23:07

    SethTisue on 2.12.x

    Remove unused AssertUtil.assert… Merge pull request #9766 from s… (compare)

  • Sep 22 23:07
    SethTisue closed #9766
  • Sep 22 22:40
    dwijnand commented #9766
  • Sep 22 20:20
    SethTisue commented #9764
Vinayak Pathak
@vinayakpathak
true
Fabio Labella
@SystemFw
matter of fact
encoding existentials through universals in a simple way requires higher rank polymorphism (which I've talked about in this channel a few days ago), which scala doesn't have
Vinayak Pathak
@vinayakpathak
i see
Fabio Labella
@SystemFw
you could simulate it in this case, but then again abstract types already give you a way of encoding existential quantification, so...
Vinayak Pathak
@vinayakpathak
i'm thinking about your statement: "I have a Monoid for some type, but I dont know which type"
Fabio Labella
@SystemFw
yeah, that doesn't hold
go back to Model
you have a Model for some State, but you don't know which State
hence when you try to coerce it to Int, type mismatch
Vinayak Pathak
@vinayakpathak
that is if I write val m: Model = new Model {...}?
Fabio Labella
@SystemFw
yes
Vinayak Pathak
@vinayakpathak
i see i see
so existential types allow us to define values that have this information hiding feature
if you wanted to define a function that took a Model without knowing its State, you could do that with universal types too no?
Fabio Labella
@SystemFw
nope
Vinayak Pathak
@vinayakpathak
def f[Model[_]] = ??? ?
Fabio Labella
@SystemFw
because you would have Model[State]
wait
the _ you are using there doesn't mean what you think it means
because scala is weird
like
I know what you mean
but your code there doesn't mean that
Vinayak Pathak
@vinayakpathak
i see!
Fabio Labella
@SystemFw
it means that you are taking a higher-kinded type Model[_]
or in other words
def f[Model[_]] = ???
is not the same
and in fact has nothing to do with
def f(model: Model[_]) = ???
this is what you mean
a wildcard type
which again, it's a feature that encodes existentials
Vinayak Pathak
@vinayakpathak
actually yes, that's what i meant indeed
isn't this saying that f takes a value of type Model but doesn't care what State is
Fabio Labella
@SystemFw
yes
it's introducing an existential again
which is clearer if you use the forSome thing (which however is going away)
def f(model: Model[A] forSome { type A })
Vinayak Pathak
@vinayakpathak
i see i see
Fabio Labella
@SystemFw
whereas def f[A](model: Model[A]) means forall type A
Vinayak Pathak
@vinayakpathak
right
ok so doesn't it then encode existential types?
Fabio Labella
@SystemFw
what's "it" now?
Vinayak Pathak
@vinayakpathak
umm def f(model: Model[_])
or the one using forSome
Fabio Labella
@SystemFw
yes it does
both do
but thats' because you are using specific features that introduce existentials