Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Jul 19 20:37
    @SethTisue banned @tonyobanon
  • Jan 02 23:58
    @SethTisue banned @fakubishes:nerdsin.space
  • Dec 15 2021 05:01
    som-snytt commented #12516
  • Dec 15 2021 04:38
    SethTisue edited #1312
  • Dec 15 2021 04:38
    SethTisue opened #2273
  • Dec 15 2021 04:31
    jackkoenig opened #12516
  • Dec 15 2021 04:29
    SethTisue edited #1312
  • Dec 15 2021 04:28
    SethTisue edited #1312
  • Dec 15 2021 04:27
    SethTisue labeled #9831
  • Dec 15 2021 04:27
    scala-jenkins milestoned #9831
  • Dec 15 2021 04:27
    SethTisue labeled #9831
  • Dec 15 2021 04:27
    SethTisue opened #9831
  • Dec 15 2021 03:35
    som-snytt commented #11339
  • Dec 15 2021 03:27
    som-snytt labeled #12494
  • Dec 15 2021 03:07
    SethTisue edited #1312
  • Dec 15 2021 03:07
    SethTisue edited #1312
  • Dec 15 2021 03:05
    SethTisue edited #1312
  • Dec 15 2021 03:05
    SethTisue edited #1312
  • Dec 15 2021 03:05
    SethTisue edited #1312
  • Dec 15 2021 02:58
    SethTisue edited #1312
Fabio Labella
@SystemFw
no, it's a native feature for existentials
Vinayak Pathak
@vinayakpathak
or is it the "typeclass trick" using implicits
Fabio Labella
@SystemFw
which is half-broken, and it's going away

or is it the "typeclass trick" using implicits

No, I don't see any relevance to typeclasses and implicits here

Vinayak Pathak
@vinayakpathak
well when you define a typeclass such as trait Monoid[T] you are saying that a Monoid[T] exists for every T however, the way you implement it using implicits, it is guaranteed that it only exists for the T's for which you have defined a typeclass instance
so in some way you are encoding existentials using universals?
Fabio Labella
@SystemFw
no, this is a different thing
Vinayak Pathak
@vinayakpathak
okay
Fabio Labella
@SystemFw
first of all, your example has not much to do with typeclasses or implicits
you can replace Monoid[T] with anything that has a type parameter and explicit instances, and your question remains the same
second, you can look at existentials to be linked to information hiding
as in "I have a Monoid for some type, but I dont know which type"
whereas when you get Monoid[Int], you know that the Monoid is for Int
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