0001    //
0002    //  Builder.swift
0003    //  Himotoki
0004    //
0005    //  Created by Syo Ikeda on 5/11/15.
0006    //  Copyright (c) 2015 Syo Ikeda. All rights reserved.
0007    //
0008    
0009    // MARK: Builder
0010    
0011    @available(*, deprecated, message="Use the given initializer directly instead")
0012    public func build<A, Value>(create: (A) -> Value) -> (A) -> Value {
0013        return { a in
0014            create(a)
0015        }
0016    }
0017    
0018    @available(*, deprecated, message="Use the given initializer directly instead")
0019    public func build<A, B, Value>(create: (A, B) -> Value) -> (A, B) -> Value {
0020        return { a, b in
0021            create(a, b)
0022        }
0023    }
0024    
0025    @available(*, deprecated, message="Use the given initializer directly instead")
0026    public func build<A, B, C, Value>(create: (A, B, C) -> Value) -> (A, B, C) -> Value {
0027        return { a, b, c in
0028            create(a, b, c)
0029        }
0030    }
0031    
0032    @available(*, deprecated, message="Use the given initializer directly instead")
0033    public func build<A, B, C, D, Value>(create: (A, B, C, D) -> Value) -> (A, B, C, D) -> Value {
0034        return { a, b, c, d in
0035            create(a, b, c, d)
0036        }
0037    }
0038    
0039    @available(*, deprecated, message="Use the given initializer directly instead")
0040    public func build<A, B, C, D, E, Value>(create: (A, B, C, D, E) -> Value) -> (A, B, C, D, E) -> Value {
0041        return { a, b, c, d, e in
0042            create(a, b, c, d, e)
0043        }
0044    }
0045    
0046    @available(*, deprecated, message="Use the given initializer directly instead")
0047    public func build<A, B, C, D, E, F, Value>(create: (A, B, C, D, E, F) -> Value) -> (A, B, C, D, E, F) -> Value {
0048        return { a, b, c, d, e, f in
0049            create(a, b, c, d, e, f)
0050        }
0051    }
0052    
0053    @available(*, deprecated, message="Use the given initializer directly instead")
0054    public func build<A, B, C, D, E, F, G, Value>(create: (A, B, C, D, E, F, G) -> Value) -> (A, B, C, D, E, F, G) -> Value {
0055        return { a, b, c, d, e, f, g in
0056            create(a, b, c, d, e, f, g)
0057        }
0058    }
0059    
0060    @available(*, deprecated, message="Use the given initializer directly instead")
0061    public func build<A, B, C, D, E, F, G, H, Value>(create: (A, B, C, D, E, F, G, H) -> Value) -> (A, B, C, D, E, F, G, H) -> Value {
0062        return { a, b, c, d, e, f, g, h in
0063            create(a, b, c, d, e, f, g, h)
0064        }
0065    }
0066    
0067    @available(*, deprecated, message="Use the given initializer directly instead")
0068    public func build<A, B, C, D, E, F, G, H, I, Value>(create: (A, B, C, D, E, F, G, H, I) -> Value) -> (A, B, C, D, E, F, G, H, I) -> Value {
0069        return { a, b, c, d, e, f, g, h, i in
0070            create(a, b, c, d, e, f, g, h, i)
0071        }
0072    }
0073    
0074    @available(*, deprecated, message="Use the given initializer directly instead")
0075    public func build<A, B, C, D, E, F, G, H, I, J, Value>(create: (A, B, C, D, E, F, G, H, I, J) -> Value) -> (A, B, C, D, E, F, G, H, I, J) -> Value {
0076        return { a, b, c, d, e, f, g, h, i, j in
0077            create(a, b, c, d, e, f, g, h, i, j)
0078        }
0079    }
0080    
0081    @available(*, deprecated, message="Use the given initializer directly instead")
0082    public func build<A, B, C, D, E, F, G, H, I, J, K, Value>(create: (A, B, C, D, E, F, G, H, I, J, K) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K) -> Value {
0083        return { a, b, c, d, e, f, g, h, i, j, k in
0084            create(a, b, c, d, e, f, g, h, i, j, k)
0085        }
0086    }
0087    
0088    @available(*, deprecated, message="Use the given initializer directly instead")
0089    public func build<A, B, C, D, E, F, G, H, I, J, K, L, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L) -> Value {
0090        return { a, b, c, d, e, f, g, h, i, j, k, l in
0091            create(a, b, c, d, e, f, g, h, i, j, k, l)
0092        }
0093    }
0094    
0095    @available(*, deprecated, message="Use the given initializer directly instead")
0096    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M) -> Value {
0097        return { a, b, c, d, e, f, g, h, i, j, k, l, m in
0098            create(a, b, c, d, e, f, g, h, i, j, k, l, m)
0099        }
0100    }
0101    
0102    @available(*, deprecated, message="Use the given initializer directly instead")
0103    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> Value {
0104        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n in
0105            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n)
0106        }
0107    }
0108    
0109    @available(*, deprecated, message="Use the given initializer directly instead")
0110    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> Value {
0111        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o in
0112            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
0113        }
0114    }
0115    
0116    @available(*, deprecated, message="Use the given initializer directly instead")
0117    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> Value {
0118        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p in
0119            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
0120        }
0121    }
0122    
0123    @available(*, deprecated, message="Use the given initializer directly instead")
0124    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> Value {
0125        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q in
0126            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
0127        }
0128    }
0129    
0130    @available(*, deprecated, message="Use the given initializer directly instead")
0131    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) -> Value {
0132        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r in
0133            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
0134        }
0135    }
0136    
0137    @available(*, deprecated, message="Use the given initializer directly instead")
0138    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) -> Value {
0139        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s in
0140            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
0141        }
0142    }
0143    
0144    @available(*, deprecated, message="Use the given initializer directly instead")
0145    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) -> Value {
0146        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t in
0147            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
0148        }
0149    }
0150    
0151    @available(*, deprecated, message="Use the given initializer directly instead")
0152    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) -> Value {
0153        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u in
0154            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)
0155        }
0156    }
0157    
0158    @available(*, deprecated, message="Use the given initializer directly instead")
0159    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) -> Value {
0160        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v in
0161            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)
0162        }
0163    }
0164    
0165    @available(*, deprecated, message="Use the given initializer directly instead")
0166    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W) -> Value {
0167        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w in
0168            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)
0169        }
0170    }
0171    
0172    @available(*, deprecated, message="Use the given initializer directly instead")
0173    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X) -> Value {
0174        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x in
0175            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)
0176        }
0177    }
0178    
0179    @available(*, deprecated, message="Use the given initializer directly instead")
0180    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y) -> Value {
0181        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y in
0182            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)
0183        }
0184    }
0185    
0186    @available(*, deprecated, message="Use the given initializer directly instead")
0187    public func build<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, Value>(create: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z) -> Value) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z) -> Value {
0188        return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z in
0189            create(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)
0190        }
0191    }
0192