Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Sep 20 21:41
    SethTisue edited #787
  • Sep 20 21:40
    SethTisue commented #789
  • Sep 20 21:40
    SethTisue demilestoned #9763
  • Sep 20 21:40
    SethTisue closed #9763
  • Sep 20 21:40
    SethTisue commented #9763
  • Sep 20 21:32
    SethTisue synchronize #9763
  • Sep 20 21:30
    SethTisue commented #9763
  • Sep 20 21:30
    scala-jenkins milestoned #9763
  • Sep 20 21:30
    SethTisue reopened #9763
  • Sep 20 21:28

    SethTisue on scala-dev

    bye bye AdoptOpenJDK hello Temu… (compare)

  • Sep 20 21:28
    SethTisue closed #789
  • Sep 20 21:28
    SethTisue closed #788
  • Sep 20 21:28
    SethTisue synchronize #789
  • Sep 20 21:28
    SethTisue edited #789
  • Sep 20 21:27
    SethTisue opened #789
  • Sep 20 21:24
    SethTisue commented #788
  • Sep 20 21:23
    SethTisue commented #788
  • Sep 20 20:43
    SethTisue synchronize #1487
  • Sep 20 20:42
    SethTisue synchronize #1486
  • Sep 20 20:06
    SethTisue synchronize #1487
Fabio Labella
@SystemFw
think Either
trepidacious
@trepidacious
@jmcardon I think I'm ok on that, we just ended up talking about two things at once, I didn't know about type constructors versus data constructors though
Fabio Labella
@SystemFw
that's also a type constructor
but can't be a functor
Either a can
Jose C
@jmcardon
b-b-b-b-bifunctor!
trepidacious
@trepidacious
Ah because it has two type paramters
Fabio Labella
@SystemFw
so I'd recommend just talking in terms of kinds
it's way more precise
trepidacious
@trepidacious
Is that * -> * -> * then?
Fabio Labella
@SystemFw
yeah
and in haskell types and "type constructors" have the same representation anyway
trepidacious
@trepidacious
How do I pronounce *->*?
Fabio Labella
@SystemFw
the term "type constructor" is imho only useful when explaining the difference with "data constructors"
star to star
that's how I do it
Rich
@Rich2
Could you implement Option in terms of Either?
type Option[A] = Either[Unit, A]
type Some[A] = Right[Unit, A]
val None = Left[Unit, Nothing](Unit)
Fabio Labella
@SystemFw
you can also say Type to Type but it's more confusing since you are saying type a lot as well
trepidacious
@trepidacious
Makes sense. So that is kind of a single parameter function on types?
Fabio Labella
@SystemFw
yeah, pretty much
with the usual caveats wrt to currying
Jose C
@jmcardon
star to star :P
jk
@Richtype yeah
trepidacious
@trepidacious
I should read up on the data constructor thing, but approximately Just and Nothing are ways of getting a value of type Maybe, but that does not make them types themselves?
Jose C
@jmcardon
you can
Option is essentially Either with less information
Fabio Labella
@SystemFw
@trepidacious yes
Jose C
@jmcardon
you discard the information on the left parameter
Fabio Labella
@SystemFw
Some and Nothing do two things
Jose C
@jmcardon
and you can implement option
trepidacious
@trepidacious
Sorry of type Maybe a I guess
Fabio Labella
@SystemFw
one) they construct values of type Maybe a
two) they are runtime tags that are used to do runtime dispatch (pattern matching)
trepidacious
@trepidacious
@SystemFw So in Scala terms a constructor and an unapply?
Fabio Labella
@SystemFw
yeah
well, they literally are tags
that are part of the runtime representation
trepidacious
@trepidacious
Like in a tagged union?
Fabio Labella
@SystemFw
kind of like python "types"
yes, pretty much
trepidacious
@trepidacious
Thanks that's much clearer, I would probably have tripped over that later :)
Fabio Labella
@SystemFw
types are compile time labels that are used to statically prove the absence of certain behaviour
tags are runtime labels that inform you about a specific data representation in memory
when python (or any other "strongly typed" untyped language) programmers talk about types
those aren't types, they are tags
trepidacious
@trepidacious
I guess they are kind of types if the set of behaviours you check for is empty ? ;)
Fabio Labella
@SystemFw
well, you jest
but one view of untyped languages
trepidacious
@trepidacious
Vacuously typed! It's the new thing :)
Fabio Labella
@SystemFw
is that they are actually unityped
so, everything has one type (e.g Object or whatever), with lots of tags (Int, String, Dict or whatever)