Пример #1
0
def maybe_quote(quote_some, x):
    x = maybe_type(x)
    return app(
        x,
        QUOTE(none),
        lambda y: qapp(quote(some), app(quote_some, y)),
    )
Пример #2
0
def prod_quote(quote_fst, quote_snd, xy):
    return app(
        xy,
        lambda x, y: qapp(quote(pair), app(quote_fst, x), app(quote_snd, y)),
    )
Пример #3
0
def qfix(qf):
    return EVAL(qf, qapp(quote(qfix), qf))
Пример #4
0
def enum_contains(qxs, qy):
    return QLESS(qapp(quote(box), qy), qxs)
Пример #5
0
    [
        (ok, ok, ok),
        (ok, undefined, ok),
        (undefined, ok, ok),
        (undefined, undefined, undefined),
        (ok, true, error),
        (ok, false, error),
        (true, ok, error),
        (false, ok, error),
    ]
)
def test_unit_or(x, y, expected):
    assert simplify(lib.unit_or(x, y)) == expected


@for_each([(ok, quote(ok)), (undefined, undefined), (error, error), (true, error), (false, error)])
def test_unit_quote(x, expected):
    assert simplify(lib.unit_quote(x)) == expected


@for_each([(ok, true), (undefined, true), (error, false), (true, false), (false, false)])
def test_enum_unit(y, expected):
    qxs = quote(lib.enum_unit)
    assert simplify(lib.enum_contains(qxs, quote(y))) == expected


# ----------------------------------------------------------------------------
# Bool


@for_each([(true, true), (false, false), (error, error), (undefined, undefined), (ok, error), (join, error)])
Пример #6
0
def list_quote(quote_item, xs):
    return xs(QUOTE(nil), lambda h, t:
              qapp(quote(cons), quote_item(h), list_quote(t)))
Пример #7
0
def maybe_quote(quote_some, x):
    x = maybe_type(x)
    return x(QUOTE(none), lambda y: qapp(quote(some), quote_some(y)))
Пример #8
0
def list_quote(quote_item, xs):
    return app(
        xs,
        QUOTE(nil),
        lambda h, t: qapp(quote(cons), app(quote_item, h), list_quote(t)),
    )
Пример #9
0
def test_enum_num(y, expected):
    qxs = quote(lib.enum_num)
    assert simplify(lib.enum_contains(qxs, quote(y))) == expected
Пример #10
0
def test_enum_list(enum_item, y, expected):
    qxs = quote(lib.enum_list(enum_item))
    assert simplify(lib.enum_contains(qxs, quote(y))) == expected
Пример #11
0
def test_enum_sum(enum_inl, enum_inr, y, expected):
    qxs = quote(lib.enum_sum(enum_inl, enum_inr))
    assert simplify(lib.enum_contains(qxs, quote(y))) == expected
Пример #12
0
def test_enum_prod(enum_fst, enum_snd, y, expected):
    qxs = quote(lib.enum_prod(enum_fst, enum_snd))
    assert simplify(lib.enum_contains(qxs, quote(y))) == expected
Пример #13
0
def test_enum_contains(xs, y, expected):
    qxs = quote(enum(xs))
    qy = quote(y)
    assert reduce(lib.enum_contains(qxs, qy)) == expected
Пример #14
0
def sum_quote(quote_inl, quote_inr, xy):
    return app(
        xy,
        lambda x: qapp(quote(inl), app(quote_inl, x)),
        lambda y: qapp(quote(inr), app(quote_inr, y)),
    )
Пример #15
0
def prod_quote(quote_fst, quote_snd, xy):
    return xy(lambda x, y: qapp(quote(pair), quote_fst(x), quote_snd(y)))
Пример #16
0
def num_quote(x):
    return app(x, QUOTE(zero), lambda px: qapp(quote(succ), num_quote(px)))
Пример #17
0
def sum_quote(quote_inl, quote_inr, xy):
    return xy(lambda x: qapp(quote(inl), quote_inl(x)),
              lambda y: qapp(quote(inr), quote_inr(y)))
Пример #18
0
def enum_contains(qxs, qy):
    return app(LESS, qapp(quote(box), qy), qxs)
Пример #19
0
def test_stream_quote(quote_item, xs):
    assert lib.stream_quote(quote_item, xs) is quote(xs)