def encode(values): if not isinstance(values, list): raise TypeError(values) code = lib.nil for value in reversed(values): code = lib.cons(encode_item(value), code) return code
def encode(values): if not isinstance(values, list): raise TypeError(values) term = lib.nil for value in reversed(values): term = lib.cons(encode_item(value), term) return term
def decode_list(decode_item): head = unification.var('head') tail = unification.var('tail') cons_pattern = lib.cons(head, tail) def decode(code): result = [] while code is not lib.nil: match = unification.unify(cons_pattern, code) if not match: raise TypeError(code) result.append(decode_item(match[head])) code = match[tail] return result return decode
def decode_list(decode_item): head = NVAR('head') tail = NVAR('tail') cons_pattern = lib.cons(head, tail) def decode(term): result = [] while term is not lib.nil: match = pattern.match(cons_pattern, term) if match is None: raise TypeError(pretty(term)) result.append(decode_item(match[head])) term = match[tail] return result return decode
], 'encode_error': [None, (), (True,), [True, 0], True, 0, 'asdf'] }, ('maybe', 'bool'): { 'ok': [ (lib.none, None), (lib.some(lib.true), (True,)), (lib.some(lib.false), (False,)), ], 'encode_error': [True, False, 0, 1, 2, (), 'asdf'], 'decode_error': [I], }, ('list', 'bool'): { 'ok': [ (lib.nil, []), (lib.cons(lib.true, lib.cons(lib.false, lib.nil)), [True, False]), ], 'encode_error': [None, True, False, 0, 1, 2, (), 'asdf', [[True]]], 'decode_error': [I], }, ('list', ('list', 'num')): { 'ok': [ (lib.nil, []), (lib.cons(lib.nil, lib.nil), [[]]), (lib.cons(lib.cons(lib.zero, lib.nil), lib.nil), [[0]]), ], 'encode_error': [0, [1], [[2], 3], [[[]]]], }, ('bytes'): { 'ok': [(lib.nil, b'')], 'encode_error': [None, True, False, 0, 1, 2, (), [[True]]],