bio4j / dynamograph

GSoC 2014 project - a DynamoDB based graph DB
GNU Affero General Public License v3.0
4 stars 1 forks source link

Meeting notes - 10.06.2014 #28

Closed alberskib closed 10 years ago

alberskib commented 10 years ago
laughedelic commented 10 years ago

Just a little note about type parameters/members. It's not that type parameters are evil, they just should be used carefully, i.e. for example just for setting a corresponding type member. For example, a common pattern is

trait AnySomething {
  type Member <: T
}

class Something[Parameter <: T] extends AnySomething {
  type Member = Parameter
}

Then it's convenient to use X <: Something[Foo] in the sense of X <: AnySomething { type Member = X } — it's just shorter, but then it is safe to ask X#Member to get Foo. Also Something often has normal parameters and is used as a constructor for that abstract type AnySomething, like

trait AnySomething {
  type Member <: T
  val member: Member
}

case class Something[Parameter <: T](val member: Parameter) extends AnySomething {
  type Member = Parameter
}

Then it's convenient to use val x = Something(foo) without manual setting of Member to foo.type