Advertisement
Guest User

TypeWrapper definitions

a guest
Feb 26th, 2021
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 12.78 KB | None | 0 0
  1.  
  2. // Inspired by Arrow's Union classes definition
  3. sealed class TypeWrapper22<out T1, out T2, out T3, out T4, out T5, out T6, out T7, out T8, out T9, out T10, out T11, out T12, out T13, out T14, out T15, out T16, out T17, out T18, out T19, out T20, out T21, out T22> {
  4.     @PublishedApi
  5.     internal object IMPL :
  6.         TypeWrapper22<Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing>()
  7. }
  8. typealias TypeWrapper21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> = TypeWrapper22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, Nothing>
  9. typealias TypeWrapper20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> = TypeWrapper21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, Nothing>
  10. typealias TypeWrapper19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> = TypeWrapper20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, Nothing>
  11. typealias TypeWrapper18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> = TypeWrapper19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, Nothing>
  12. typealias TypeWrapper17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> = TypeWrapper18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, Nothing>
  13. typealias TypeWrapper16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> = TypeWrapper17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, Nothing>
  14. typealias TypeWrapper15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> = TypeWrapper16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, Nothing>
  15. typealias TypeWrapper14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> = TypeWrapper15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, Nothing>
  16. typealias TypeWrapper13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> = TypeWrapper14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Nothing>
  17. typealias TypeWrapper12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> = TypeWrapper13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, Nothing>
  18. typealias TypeWrapper11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> = TypeWrapper12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, Nothing>
  19. typealias TypeWrapper10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> = TypeWrapper11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, Nothing>
  20. typealias TypeWrapper9<T1, T2, T3, T4, T5, T6, T7, T8, T9> = TypeWrapper10<T1, T2, T3, T4, T5, T6, T7, T8, T9, Nothing>
  21. typealias TypeWrapper8<T1, T2, T3, T4, T5, T6, T7, T8> = TypeWrapper9<T1, T2, T3, T4, T5, T6, T7, T8, Nothing>
  22. typealias TypeWrapper7<T1, T2, T3, T4, T5, T6, T7> = TypeWrapper8<T1, T2, T3, T4, T5, T6, T7, Nothing>
  23. typealias TypeWrapper6<T1, T2, T3, T4, T5, T6> = TypeWrapper7<T1, T2, T3, T4, T5, T6, Nothing>
  24. typealias TypeWrapper5<T1, T2, T3, T4, T5> = TypeWrapper6<T1, T2, T3, T4, T5, Nothing>
  25. typealias TypeWrapper4<T1, T2, T3, T4> = TypeWrapper5<T1, T2, T3, T4, Nothing>
  26. typealias TypeWrapper3<T1, T2, T3> = TypeWrapper4<T1, T2, T3, Nothing>
  27. typealias TypeWrapper2<T1, T2> = TypeWrapper3<T1, T2, Nothing>
  28. typealias TypeWrapper1<T1> = TypeWrapper2<T1, Nothing>
  29.  
  30. // Type "constructors". The unitx parameters are there to avoid `Overload Resolution Ambiguity` errors
  31. // due to the fact that all of the functions are named "type"
  32. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type(
  33.     unit1: Unit = Unit,
  34.     unit2: Unit = Unit,
  35.     unit3: Unit = Unit,
  36.     unit4: Unit = Unit,
  37.     unit5: Unit = Unit,
  38.     unit6: Unit = Unit,
  39.     unit7: Unit = Unit,
  40.     unit8: Unit = Unit,
  41.     unit9: Unit = Unit,
  42.     unit10: Unit = Unit,
  43.     unit11: Unit = Unit,
  44.     unit12: Unit = Unit,
  45.     unit13: Unit = Unit,
  46.     unit14: Unit = Unit,
  47.     unit15: Unit = Unit,
  48.     unit16: Unit = Unit,
  49.     unit17: Unit = Unit,
  50.     unit18: Unit = Unit,
  51.     unit19: Unit = Unit,
  52.     unit20: Unit = Unit,
  53.     unit21: Unit = Unit
  54. ): TypeWrapper22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> =
  55.     TypeWrapper22.IMPL
  56.  
  57. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> type(
  58.     unit1: Unit = Unit,
  59.     unit2: Unit = Unit,
  60.     unit3: Unit = Unit,
  61.     unit4: Unit = Unit,
  62.     unit5: Unit = Unit,
  63.     unit6: Unit = Unit,
  64.     unit7: Unit = Unit,
  65.     unit8: Unit = Unit,
  66.     unit9: Unit = Unit,
  67.     unit10: Unit = Unit,
  68.     unit11: Unit = Unit,
  69.     unit12: Unit = Unit,
  70.     unit13: Unit = Unit,
  71.     unit14: Unit = Unit,
  72.     unit15: Unit = Unit,
  73.     unit16: Unit = Unit,
  74.     unit17: Unit = Unit,
  75.     unit18: Unit = Unit,
  76.     unit19: Unit = Unit,
  77.     unit20: Unit = Unit
  78. ): TypeWrapper21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21> =
  79.     TypeWrapper22.IMPL
  80.  
  81. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> type(
  82.     unit1: Unit = Unit,
  83.     unit2: Unit = Unit,
  84.     unit3: Unit = Unit,
  85.     unit4: Unit = Unit,
  86.     unit5: Unit = Unit,
  87.     unit6: Unit = Unit,
  88.     unit7: Unit = Unit,
  89.     unit8: Unit = Unit,
  90.     unit9: Unit = Unit,
  91.     unit10: Unit = Unit,
  92.     unit11: Unit = Unit,
  93.     unit12: Unit = Unit,
  94.     unit13: Unit = Unit,
  95.     unit14: Unit = Unit,
  96.     unit15: Unit = Unit,
  97.     unit16: Unit = Unit,
  98.     unit17: Unit = Unit,
  99.     unit18: Unit = Unit,
  100.     unit19: Unit = Unit
  101. ): TypeWrapper20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20> =
  102.     TypeWrapper22.IMPL
  103.  
  104. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> type(
  105.     unit1: Unit = Unit,
  106.     unit2: Unit = Unit,
  107.     unit3: Unit = Unit,
  108.     unit4: Unit = Unit,
  109.     unit5: Unit = Unit,
  110.     unit6: Unit = Unit,
  111.     unit7: Unit = Unit,
  112.     unit8: Unit = Unit,
  113.     unit9: Unit = Unit,
  114.     unit10: Unit = Unit,
  115.     unit11: Unit = Unit,
  116.     unit12: Unit = Unit,
  117.     unit13: Unit = Unit,
  118.     unit14: Unit = Unit,
  119.     unit15: Unit = Unit,
  120.     unit16: Unit = Unit,
  121.     unit17: Unit = Unit,
  122.     unit18: Unit = Unit
  123. ): TypeWrapper19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> =
  124.     TypeWrapper22.IMPL
  125.  
  126. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> type(
  127.     unit1: Unit = Unit,
  128.     unit2: Unit = Unit,
  129.     unit3: Unit = Unit,
  130.     unit4: Unit = Unit,
  131.     unit5: Unit = Unit,
  132.     unit6: Unit = Unit,
  133.     unit7: Unit = Unit,
  134.     unit8: Unit = Unit,
  135.     unit9: Unit = Unit,
  136.     unit10: Unit = Unit,
  137.     unit11: Unit = Unit,
  138.     unit12: Unit = Unit,
  139.     unit13: Unit = Unit,
  140.     unit14: Unit = Unit,
  141.     unit15: Unit = Unit,
  142.     unit16: Unit = Unit,
  143.     unit17: Unit = Unit
  144. ): TypeWrapper18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> = TypeWrapper22.IMPL
  145.  
  146. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> type(
  147.     unit1: Unit = Unit,
  148.     unit2: Unit = Unit,
  149.     unit3: Unit = Unit,
  150.     unit4: Unit = Unit,
  151.     unit5: Unit = Unit,
  152.     unit6: Unit = Unit,
  153.     unit7: Unit = Unit,
  154.     unit8: Unit = Unit,
  155.     unit9: Unit = Unit,
  156.     unit10: Unit = Unit,
  157.     unit11: Unit = Unit,
  158.     unit12: Unit = Unit,
  159.     unit13: Unit = Unit,
  160.     unit14: Unit = Unit,
  161.     unit15: Unit = Unit,
  162.     unit16: Unit = Unit
  163. ): TypeWrapper17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> = TypeWrapper22.IMPL
  164.  
  165. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> type(
  166.     unit1: Unit = Unit,
  167.     unit2: Unit = Unit,
  168.     unit3: Unit = Unit,
  169.     unit4: Unit = Unit,
  170.     unit5: Unit = Unit,
  171.     unit6: Unit = Unit,
  172.     unit7: Unit = Unit,
  173.     unit8: Unit = Unit,
  174.     unit9: Unit = Unit,
  175.     unit10: Unit = Unit,
  176.     unit11: Unit = Unit,
  177.     unit12: Unit = Unit,
  178.     unit13: Unit = Unit,
  179.     unit14: Unit = Unit,
  180.     unit15: Unit = Unit
  181. ): TypeWrapper16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> = TypeWrapper22.IMPL
  182.  
  183. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> type(
  184.     unit1: Unit = Unit,
  185.     unit2: Unit = Unit,
  186.     unit3: Unit = Unit,
  187.     unit4: Unit = Unit,
  188.     unit5: Unit = Unit,
  189.     unit6: Unit = Unit,
  190.     unit7: Unit = Unit,
  191.     unit8: Unit = Unit,
  192.     unit9: Unit = Unit,
  193.     unit10: Unit = Unit,
  194.     unit11: Unit = Unit,
  195.     unit12: Unit = Unit,
  196.     unit13: Unit = Unit,
  197.     unit14: Unit = Unit
  198. ): TypeWrapper15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> = TypeWrapper22.IMPL
  199.  
  200. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> type(
  201.     unit1: Unit = Unit,
  202.     unit2: Unit = Unit,
  203.     unit3: Unit = Unit,
  204.     unit4: Unit = Unit,
  205.     unit5: Unit = Unit,
  206.     unit6: Unit = Unit,
  207.     unit7: Unit = Unit,
  208.     unit8: Unit = Unit,
  209.     unit9: Unit = Unit,
  210.     unit10: Unit = Unit,
  211.     unit11: Unit = Unit,
  212.     unit12: Unit = Unit,
  213.     unit13: Unit = Unit
  214. ): TypeWrapper14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> = TypeWrapper22.IMPL
  215.  
  216. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> type(
  217.     unit1: Unit = Unit,
  218.     unit2: Unit = Unit,
  219.     unit3: Unit = Unit,
  220.     unit4: Unit = Unit,
  221.     unit5: Unit = Unit,
  222.     unit6: Unit = Unit,
  223.     unit7: Unit = Unit,
  224.     unit8: Unit = Unit,
  225.     unit9: Unit = Unit,
  226.     unit10: Unit = Unit,
  227.     unit11: Unit = Unit,
  228.     unit12: Unit = Unit
  229. ): TypeWrapper13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> = TypeWrapper22.IMPL
  230.  
  231. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type(
  232.     unit1: Unit = Unit,
  233.     unit2: Unit = Unit,
  234.     unit3: Unit = Unit,
  235.     unit4: Unit = Unit,
  236.     unit5: Unit = Unit,
  237.     unit6: Unit = Unit,
  238.     unit7: Unit = Unit,
  239.     unit8: Unit = Unit,
  240.     unit9: Unit = Unit,
  241.     unit10: Unit = Unit,
  242.     unit11: Unit = Unit
  243. ): TypeWrapper12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> = TypeWrapper22.IMPL
  244.  
  245. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type(
  246.     unit1: Unit = Unit,
  247.     unit2: Unit = Unit,
  248.     unit3: Unit = Unit,
  249.     unit4: Unit = Unit,
  250.     unit5: Unit = Unit,
  251.     unit6: Unit = Unit,
  252.     unit7: Unit = Unit,
  253.     unit8: Unit = Unit,
  254.     unit9: Unit = Unit,
  255.     unit10: Unit = Unit
  256. ): TypeWrapper11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> = TypeWrapper22.IMPL
  257.  
  258. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type(
  259.     unit1: Unit = Unit,
  260.     unit2: Unit = Unit,
  261.     unit3: Unit = Unit,
  262.     unit4: Unit = Unit,
  263.     unit5: Unit = Unit,
  264.     unit6: Unit = Unit,
  265.     unit7: Unit = Unit,
  266.     unit8: Unit = Unit,
  267.     unit9: Unit = Unit
  268. ): TypeWrapper10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> = TypeWrapper22.IMPL
  269.  
  270. inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9> type(
  271.     unit1: Unit = Unit,
  272.     unit2: Unit = Unit,
  273.     unit3: Unit = Unit,
  274.     unit4: Unit = Unit,
  275.     unit5: Unit = Unit,
  276.     unit6: Unit = Unit,
  277.     unit7: Unit = Unit,
  278.     unit8: Unit = Unit
  279. ): TypeWrapper9<T1, T2, T3, T4, T5, T6, T7, T8, T9> = TypeWrapper22.IMPL
  280.  
  281. inline fun <T1, T2, T3, T4, T5, T6, T7, T8> type(
  282.     unit1: Unit = Unit,
  283.     unit2: Unit = Unit,
  284.     unit3: Unit = Unit,
  285.     unit4: Unit = Unit,
  286.     unit5: Unit = Unit,
  287.     unit6: Unit = Unit,
  288.     unit7: Unit = Unit
  289. ): TypeWrapper8<T1, T2, T3, T4, T5, T6, T7, T8> = TypeWrapper22.IMPL
  290.  
  291. inline fun <T1, T2, T3, T4, T5, T6, T7> type(
  292.     unit1: Unit = Unit,
  293.     unit2: Unit = Unit,
  294.     unit3: Unit = Unit,
  295.     unit4: Unit = Unit,
  296.     unit5: Unit = Unit,
  297.     unit6: Unit = Unit
  298. ): TypeWrapper7<T1, T2, T3, T4, T5, T6, T7> = TypeWrapper22.IMPL
  299.  
  300. inline fun <T1, T2, T3, T4, T5, T6> type(
  301.     unit1: Unit = Unit,
  302.     unit2: Unit = Unit,
  303.     unit3: Unit = Unit,
  304.     unit4: Unit = Unit,
  305.     unit5: Unit = Unit
  306. ): TypeWrapper6<T1, T2, T3, T4, T5, T6> = TypeWrapper22.IMPL
  307.  
  308. inline fun <T1, T2, T3, T4, T5> type(
  309.     unit1: Unit = Unit,
  310.     unit2: Unit = Unit,
  311.     unit3: Unit = Unit,
  312.     unit4: Unit = Unit
  313. ): TypeWrapper5<T1, T2, T3, T4, T5> = TypeWrapper22.IMPL
  314.  
  315. inline fun <T1, T2, T3, T4> type(
  316.     unit1: Unit = Unit,
  317.     unit2: Unit = Unit,
  318.     unit3: Unit = Unit
  319. ): TypeWrapper4<T1, T2, T3, T4> = TypeWrapper22.IMPL
  320.  
  321. inline fun <T1, T2, T3> type(unit1: Unit = Unit, unit2: Unit = Unit): TypeWrapper3<T1, T2, T3> = TypeWrapper22.IMPL
  322. inline fun <T1, T2> type(unit1: Unit = Unit): TypeWrapper2<T1, T2> = TypeWrapper22.IMPL
  323. inline fun <T1> type(): TypeWrapper1<T1> = TypeWrapper22.IMPL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement