• Jump To … +
    data.js dentaku.normal.js env.js evaluator.js fileio.js list.js monad.js monad_transformer.js pair.js parser.js pprinter.js string.js turing.js chap01.spec.js chap02.spec.js chap03.spec.js chap04.spec.js chap05.spec.js chap06.spec.js chap07.spec.js chap08.spec.js data.spec.js dentaku.normal.spec.js evaluator.spec.js interpreter.spec.js list.spec.js monad.spec.js monad_transformer.spec.js pair.spec.js parser.spec.js pprinter.spec.js string.spec.js
  • pprinter.js

  • ¶
    "use strict";
    
    var expect = require('expect.js');
    var Data = require('./data.js');
    var List = require('./list.js');
  • ¶

    var Pair = require(‘./pair.js’);

    const Pprinter = {
      print: (data) => {
        return Data.type(data,{
          pair: () => {
            return data.match({
              empty: () => {
                return "()";
              },
              cons: (l, r) => {
                var left = Pprinter.print(l);
                var right = Pprinter.print(r);
                return "(" + left + "," + right + ")";
              }
            });
          },
          list: () => {
            return data.match({
              empty: () => {
                return "[]";
              },
              cons: (head, tail) => {
                return "[" + List.foldr(data)("nil")((item) => {
                  return (accumulator) => {
                    return  Pprinter.print(item) + "," + accumulator; 
                  };
                }) + "]";
              }
            });
          },
          number: (data) => {
            return data;
          },
          string: (data) => {
            return data;
          }
        });
      }
    };
    module.exports = Pprinter