Repository

trait Repository[F[_], ID, Alg[_[_]]] {
  def entityFor(id: ID): Alg[F]
}

Repository is parametrized with entity ID type ID and entity algebra Alg[_[_]]. It represents the ability to obtain an instance of that algebra (the entity) for a specific ID. It is typically used by the interpreter of the repository algebra (e.g. BookingRepository).