 
 import FloatingPointMath
 
-public protocol ComplexFloat : ComplexNumeric & CustomStringConvertible & FloatingPointMath
-    where Element: FloatingPoint & FloatingPointMath {
-}
+public typealias ComplexFloatElement = FloatingPoint & FloatingPointMath
+
+public protocol ComplexFloat : ComplexNumeric & CustomStringConvertible
+    where Element: ComplexFloatElement {
+}
+
 
 extension ComplexFloat {
     ///

    public static func lgamma(_ x:Element)->Self { return Self(Element.lgamma(x)) }
}

public typealias ComplexElement = FloatingPoint & FloatingPointMath

public struct Complex<R:ComplexElement> : ComplexFloat  {
    public typealias NumericType = R
    public var (real, imag):(R, R)
    public init(real r:R, imag i:R) {

    }
}

extension FloatingPoint where Self:ComplexFloatElement {
    public var i:Complex<Self> {
        return Complex(0, self)
    }
