export const toString = (list: List) => { if (!isList(list)) { if (pairs.isPair(list)) { return `pair: ${pairs.toString(list)}`; } else if (typeof list === 'object') { return JSON.stringify(list, null, 2); } return list; } if (isEmpty(list)) { return '()'; } const rec = (p) => { const first = head(p); const rest = tail(p); if (isEmpty(rest)) { return toString(first); } return `${toString(first)}, ${rec(rest)}`; }; return `(${rec(list)})`; };
export const isList = (mix: any) => { if (mix === null) { return true; } if (pairs.isPair(mix)) { return isList(pairs.cdr(mix)); } return false; };
export const checkList = (list: ?List) => { if (!isList(list)) { let value; if (pairs.isPair(list)) { value = `pair: ${pairs.toString(list)}`; } else if (typeof list === 'object') { value = JSON.stringify(list, null, 2); } else { value = String(list); } throw new Error(`Argument must be list, but it was '${value}'`); } };
export const hasChildren = element => isPair(cdr(element));