@wrapper
@modifier(
  *
)
class EquilateralTriangle: NamedShape {
  var sideLength: Double = 0.0

  @attr
  init(
    sideLength: Double, 
    name: String
  ) {
    self.sideLength = sideLength
  }

  var perimeter: Double {
    willSet {
    }
  }

  @funcattr
  override func simpleDescription(a: int, b: int) -> String {
    return "An equilateral triangle with sides of length \(sideLength)."
  }
}

@attr
protocol ExampleProtocol {
  var simpleDescription: String { get }
  mutating func adjust()
}

@available(*)
func test() {

}

@attr(*)
typealias Foo = Bar

@attr
struct Foo<
  Bar
> {
  @Provider
  var test = 1

  subscript(index: Int) -> Int {
    var foo = 2
  }
}