with traits を使用し、構造型を型パラメーターの制約として使用するコードの一部に、再帰的な構造型が必要でした。問題なく動作しましたが、後で Scala が再帰構造型をサポートしていないことを知りました。
それで、誰かがこれがうまくいく理由を説明できますか:
scala> trait Test[M[A] <: { def map[B](f: A => B) : M[B] } ] {}
defined trait Test
これはそうではありません:
scala> def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null
<console>:5: error: illegal cyclic reference involving type M
def test[M[A] <: { def map[B](f: A => B) : M[B] } ] = null