 extension Float {
     init(_ number: Number) {
         switch number {
-        case .int(let n): self.init(n)
-        case .int8(let n): self.init(n)
-        case .int16(let n): self.init(n)
-        case .int32(let n): self.init(n)
-        case .int64(let n): self.init(n)
-
-        case .uint(let n): self.init(n)
-        case .uint8(let n): self.init(n)
-        case .uint16(let n): self.init(n)
-        case .uint32(let n): self.init(n)
-        case .uint64(let n): self.init(n)
-
-        case .float(let n): self.init(n)
-        case .double(let n): self.init(n)
+        case let .int(value)    : self.init(value)
+        case let .int8(value)   : self.init(value)
+        case let .int16(value)  : self.init(value)
+        case let .int32(value)  : self.init(value)
+        case let .int64(value)  : self.init(value)
+        case let .uint(value)   : self.init(value)
+        case let .uint8(value)  : self.init(value)
+        case let .uint16(value) : self.init(value)
+        case let .uint32(value) : self.init(value)
+        case let .uint64(value) : self.init(value)
+        // TODO: review
+        case let .float(value)  : self.init(value)
+        case let .double(value) : self.init(value)
         }
     }
 }

extension Int8 {
    init?(_ number: Number) {
        switch number {
        case let .int(value)    where value <= Int(Int8.max):    self.init(value)
        case let .int8(value):                                   self.init(value)
        case let .int16(value)  where value <= Int16(Int8.max):  self.init(value)
        case let .int32(value)  where value <= Int32(Int8.max):  self.init(value)
        case let .int64(value)  where value <= Int64(Int8.max):  self.init(value)
        case let .uint(value)   where value <= UInt(Int8.max):   self.init(value)
        case let .uint8(value):                                  self.init(value)
        case let .uint16(value) where value <= UInt16(Int8.max): self.init(value)
        case let .uint32(value) where value <= UInt32(Int8.max): self.init(value)
        case let .uint64(value) where value <= UInt64(Int8.max): self.init(value)
        case let .float(value)  where value <= Float(Int8.max):  self.init(value)
        case let .double(value) where value <= Double(Int8.max): self.init(value)
        default: return nil
        }

extension Double {
    init(_ number: Number) {
        switch number {
        case let .int(value)    : self.init(value)
        case let .int8(value)   : self.init(value)
        case let .int16(value)  : self.init(value)
        case let .int32(value)  : self.init(value)
        case let .int64(value)  : self.init(value)
        case let .uint(value)   : self.init(value)
        case let .uint8(value)  : self.init(value)
        case let .uint16(value) : self.init(value)
        case let .uint32(value) : self.init(value)
        case let .uint64(value) : self.init(value)
        // TODO: review
        case let .float(value)  : self.init(value)
        case let .double(value) : self.init(value)
        }
    }
}
