fork download
  1. function HuitaMonad(value) {
  2. var realHuita = (value && Number.isInteger(value)) ? value : 0;
  3.  
  4. this.getHuita = function() {
  5. return realHuita;
  6. };
  7.  
  8. this.monadReturn = function(huita) {
  9. return new HuitaMonad(huita);
  10. };
  11.  
  12. this.monadBind = function(processor) {
  13. var huita = this.getHuita();
  14. if(huita === 0) {
  15. return this;
  16. }
  17. else {
  18. var newHuita = processor(huita);
  19. return this.monadReturn(newHuita);
  20. }
  21. };
  22. }
  23.  
  24.  
  25. var main = function() {
  26.  
  27. var monadsList = [
  28. new HuitaMonad(5),
  29. new HuitaMonad(-10),
  30. new HuitaMonad(0),
  31. new HuitaMonad()
  32. ];
  33.  
  34. var newMonadsList = monadsList.map(ebaka);
  35. newMonadsList.forEach(printHuitaMonad);
  36.  
  37.  
  38. var huitaMonad1 = new HuitaMonad(10);
  39. var huitaMonad2 = new HuitaMonad(20);
  40. var huitaMonad3 = new HuitaMonad(0);
  41.  
  42. printHuitaMonad(huitaMonad1.monadBind(f).monadBind(g).monadBind(h));
  43. printHuitaMonad(huitaMonad2.monadBind(f).monadBind(g).monadBind(h));
  44. printHuitaMonad(huitaMonad3.monadBind(f).monadBind(g).monadBind(h));
  45. };
  46.  
  47.  
  48. var ebaka = function(huitaMonad) {
  49. return huitaMonad.monadBind(f);
  50. };
  51.  
  52. var f = function(intHuita) {
  53. return 100/intHuita;
  54. };
  55.  
  56. var g = function(intHuita) {
  57. return 1 - (intHuita/5);
  58. };
  59.  
  60. var h = function(intHuita) {
  61. return Math.abs(10/intHuita);
  62. };
  63.  
  64. var printHuitaMonad = function(huitaMonad) {
  65. print(huitaMonad.getHuita());
  66. };
  67.  
  68. main();
Success #stdin #stdout 0.01s 29768KB
stdin
Standard input is empty
stdout
20
-10
0
0
10
0
0