Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is a partial answer that I came up with and got working. Basically, you create an empty trait, SubPositionSpacePosition, that gets applied to all level-2 positions. You can then define a companion object for SubPositionSpacePosition that defines the implicit conversion. You can only define the conversion for leve-2 positions to level-1 positions. Anything beyond that, and you run into the roadblocks that I outlined in the question.</p> <pre><code>import scala.language.implicitConversions class PositionSpace { positionSpace =&gt; trait Position extends Ordered[Position] { } trait SubPositionSpace extends PositionSpace with Position { subPositionSpace =&gt; trait SubPositionSpacePosition extends subPositionSpace.Position { } def append() = new Position with SubPositionSpacePosition { } def appendSubSpace() = new SubPositionSpace with SubPositionSpacePosition { } class SubPosition(private val subPositionIndex : subPositionSpace.Position) extends positionSpace.Position { } object SubPositionSpacePosition { implicit def promoteSubPositionSpacePosition(subPositionSpacePosition : SubPositionSpacePosition) : positionSpace.Position = new SubPosition(subPositionSpacePosition) } } def append() = new Position { } def appendSubSpace() = new SubPositionSpace { } } object TestCases { val positionSpace = new PositionSpace() val subSpace = positionSpace.appendSubSpace() val subSpacePosition = subSpace.append() val subSpacePositionAsPosition : positionSpace.Position = subSpacePosition val subSubSpace = subSpace.appendSubSpace() val subSubSpacePosition = subSubSpace.append() //this still fails to build!!! val subSubSpacePositionAsPosition : positionSpace.Position = subSubSpacePosition } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload