
arrow.generic.HList.kt Maven / Gradle / Ivy
package arrow.generic
/**
* A heterogeneous list of values that preserves type information
*
* [HList] is a *singly linked list* where:
* - [HNil] is the empty list
* - [HCons] holds one payload value ([HCons.head]) and a reference to the rest of the list ([HCons.tail])
*/
sealed class HList {
abstract fun size(): Int
}
data class HCons(val head: H, val tail: T) : HList() {
override fun size(): Int = 1 + tail.size()
}
object HNil : HList() {
override fun size(): Int = 0
}
/**
* HList supported arity is up to product of 22 elements
*/
typealias HList1 = HCons
typealias HList2 = HCons>
typealias HList3 = HCons>>
typealias HList4 = HCons>>>
typealias HList5 = HCons>>>>
typealias HList6 = HCons>>>>>
typealias HList7 = HCons>>>>>>
typealias HList8 = HCons>>>>>>>
typealias HList9 = HCons>>>>>>>>
typealias HList10 = HCons>>>>>>>>>
typealias HList11 = HCons>>>>>>>>>>
typealias HList12 = HCons>>>>>>>>>>>
typealias HList13 = HCons>>>>>>>>>>>>
typealias HList14 = HCons>>>>>>>>>>>>>
typealias HList15 = HCons>>>>>>>>>>>>>>
typealias HList16 = HCons>>>>>>>>>>>>>>>
typealias HList17 = HCons>>>>>>>>>>>>>>>>
typealias HList18 = HCons>>>>>>>>>>>>>>>>>
typealias HList19 = HCons>>>>>>>>>>>>>>>>>>
typealias HList20 = HCons>>>>>>>>>>>>>>>>>>>
typealias HList21 = HCons>>>>>>>>>>>>>>>>>>>>
typealias HList22 = HCons>>>>>>>>>>>>>>>>>>>>>
/**
* HList factories create proper heterogeneous lists that preserve type information up to arity 22
*/
fun hListOf(a: A): HList1 = HList1(a, HNil)
fun hListOf(a: A, b: B): HList2 = HList2(a, HCons(b, HNil))
fun hListOf(a: A, b: B, c: C): HList3 = HList3(a, HCons(b, HCons(c, HNil)))
fun hListOf(a: A, b: B, c: C, d: D): HList4 = HList4(a, HCons(b, HCons(c, HCons(d, HNil))))
fun hListOf(a: A, b: B, c: C, d: D, e: E): HList5 = HList5(a, HCons(b, HCons(c, HCons(d, HCons(e, HNil)))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F): HList6 = HList6(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HNil))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G): HList7 = HList7(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HNil)))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H): HList8 = HList8(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HNil))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I): HList9 = HList9(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HNil)))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J): HList10 = HList10(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HNil))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K): HList11 = HList11(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HNil)))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L): HList12 = HList12(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HNil))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M): HList13 = HList13(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HNil)))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N): HList14 = HList14(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HNil))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O): HList15 = HList15(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HNil)))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P): HList16 = HList16(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HNil))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q): HList17 = HList17(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HNil)))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R): HList18 = HList18(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HCons(r, HNil))))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S): HList19 = HList19(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HCons(r, HCons(s, HNil)))))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T): HList20 = HList20(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HCons(r, HCons(s, HCons(t, HNil))))))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T, u: U): HList21 = HList21(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HCons(r, HCons(s, HCons(t, HCons(u, HNil)))))))))))))))))))))
fun hListOf(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T, u: U, v: V): HList22 = HList22(a, HCons(b, HCons(c, HCons(d, HCons(e, HCons(f, HCons(g, HCons(h, HCons(i, HCons(j, HCons(k, HCons(l, HCons(m, HCons(n, HCons(o, HCons(p, HCons(q, HCons(r, HCons(s, HCons(t, HCons(u, HCons(v, HNil))))))))))))))))))))))
© 2015 - 2025 Weber Informatics LLC | Privacy Policy