// RUN: not %target-swift-frontend %s -typecheck protocol Fixpoint { typealias Algebra : Algebraic init(_ : Algebra) var out: Algebra { get }} protocol Algebraic {typealias Recur} enum Expr: Algebraic { typealias Recur = T case Null func map(transform: T -> U) -> Expr {return .Null} } func out(v: Fix) -> Fix.Recur {return v.out} func cata>(f: Expr -> T)(_ term: Fix) -> T { return f({ $0.map(cata(f)) }(out(term))) } struct Term: Fixpoint, CustomDebugStringConvertible { typealias Algebra = Expr var debugDescription: String {return cata(Term.toDebugString)(self)} static func toDebugString(expression: Expr) -> String {return ""} }