funk.lua 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. local funk = {}
  2. function funk.try(f, ...)
  3. if type(f) == 'function' then
  4. return f(...)
  5. end
  6. return f
  7. end
  8. function funk.eq(x)
  9. return function(y)
  10. return x == y
  11. end
  12. end
  13. function funk.negate(f)
  14. return function(...)
  15. return not f(...)
  16. end
  17. end
  18. function funk.chain(combine, ...)
  19. local fs = {...}
  20. return function(...)
  21. local result = nil
  22. for i = 1, #fs do
  23. result = combine(result, fs[i](...))
  24. end
  25. return result
  26. end
  27. end
  28. function funk.flow(...)
  29. return funk.chain(funk.id, ...)
  30. end
  31. function funk.any(...)
  32. local result = nil
  33. for i = 1, #arg do
  34. result = result or arg[i]
  35. end
  36. return result
  37. end
  38. function funk.all(...)
  39. local result = nil
  40. for i = 1, #arg do
  41. result = result and arg[i]
  42. end
  43. return result
  44. end
  45. function funk.val(value)
  46. return function()
  47. return value
  48. end
  49. end
  50. function funk.id(...)
  51. return ...
  52. end
  53. function funk.self(f, self)
  54. return function(...)
  55. return f(self, ...)
  56. end
  57. end
  58. -- funk key fresh
  59. function funk.key(key)
  60. return function(t)
  61. return t[key]
  62. end
  63. end
  64. function funk.method(key)
  65. return function(t)
  66. return t[key](t)
  67. end
  68. end
  69. function funk.noop() end
  70. return funk