ちょっと合理性が思いつかないのでバグの類だと思うんだけど、こういうのがコンパイルエラーになる。
indirect enum Type {
case Var(String) // ここで Use of Undeclared Type 'String' とか言われる
case String
case Int
case List(Type)
case Bool
case Function(Type, Type)
}
どうも列挙型を定義するときに既存の型名と同じ名前のcase
があるとダメみたい。case
名を変えるか、型パラメータにする。
indirect enum TypeBase<T> {
case Var(T)
case String
case Int
case Bool
case List(TypeBase<T>)
case Function(TypeBase<T>, TypeBase<T>)
}
typealias Type = TypeBase<String>
Xcode 7.0.1のPlaygroundで確認してる。