     }
 }
 
-public typealias IntRat = FixRat<Int>
-
-extension FixRat : Codable where Element: Codable {
+public typealias IntRat = FixedWidthRational<Int>
+
+extension FixedWidthRational : Codable where Element: Codable {
     public enum CodingKeys : String, CodingKey {
         public typealias RawValue = String
         case num, den

    }
}

public struct FixRat<I:FixedRationalElement> : FixedRationalType {
    public typealias IntegerLiteralType = Int
    public typealias Element = I
    public var (num, den):(I, I)

    }
}

public protocol FixedWidthRationalElement : RationalElement & FixedWidthInteger {}

extension Int:      FixedWidthRationalElement {}
extension Int8:     FixedWidthRationalElement {}
extension Int16:    FixedWidthRationalElement {}
extension Int32:    FixedWidthRationalElement {}
extension Int64:    FixedWidthRationalElement {}


extension FixedWidthRationalElement {
    public func over(_ den:Self)->FixedWidthRational<Self> {
        return FixedWidthRational(self, den)
    }
}

public protocol FixedWidthRationalType : RationalType where Element: FixedWidthRationalElement { }

extension FixedWidthRationalType {
    public static var max:Self {
        return Self(+Element.max, 1)
    }
