Example #1
0
 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
Example #2
0
 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
Example #3
0
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
Example #4
0
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
Example #5
0
     ],
     '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]]],