コード例 #1
0
ファイル: thunctor_tests.py プロジェクト: mattneary/Thunctor
 def test_mutating_bind_and_map(self):
     add = lambda a: lambda b: a + b
     addT = lambda a: lambda b: Thunk(a + b)
     t = Thunk(1)
     t.bind(addT(2))
     t.map(add(1))
     self.assertThunksEqual(t, Thunk(4))
コード例 #2
0
ファイル: phuncy.py プロジェクト: mattneary/phuncy
def do(exp, **kwargs):
    load = Thunk({})
    def loadKeypair(k, v):
        return v.map(lambda v: {k: v})
    def apply(load, k, v):
        load.bind(lambda ls: loadKeypair(k, v).map(lambda p: dict(ls, **p)))
    for k, v in kwargs.iteritems():
        apply(load, k, v)
    return load.bind(lambda ls: exp(**ls))
コード例 #3
0
ファイル: thunctor_tests.py プロジェクト: mattneary/Thunctor
    def test_mutating_bind_maps(self):
        t = Thunk(1)
        t.bind(lambda x: Thunk(1).map(lambda _: x))
        t.bind(lambda x: Thunk(1).map(lambda _: x))
        self.assertThunksEqual(t, Thunk(1))

        t = Thunk(1)
        ts = [Thunk(1), Thunk(1)]
        t.bind(lambda x: ts[0].map(lambda _: x))
        t.bind(lambda x: ts[1].map(lambda _: x))
        self.assertThunksEqual(t, Thunk(1))

        t = Thunk(1)
        ts = {'a': Thunk(1), 'b': Thunk(1)}
        t.bind(lambda x: ts['a'].map(lambda _: x + 1))
        t.bind(lambda x: ts['b'].map(lambda _: x + 1))
        self.assertThunksEqual(t, Thunk(3))

        t = Thunk({})
        ts = {'a': Thunk(1), 'b': Thunk(1)}
        t.bind(lambda x: ts['a'].map(lambda v: dict(x, **{'a': v})))
        t.bind(lambda x: ts['b'].map(lambda v: dict(x, **{'b': v})))
        self.assertThunksEqual(t, Thunk({'a': 1, 'b': 1}))

        t = Thunk({})
        ts = {'a': Thunk(1), 'b': Thunk(1)}
        k = 'a'
        t.bind(lambda x: ts[k].map(lambda v: dict(x, **{k: v})))
        k2 = 'b'
        t.bind(lambda x: ts[k2].map(lambda v: dict(x, **{k2: v})))
        self.assertThunksEqual(t, Thunk({'a': 1, 'b': 1}))

        t = Thunk({})
        ts = {'a': Thunk(1), 'b': Thunk(1)}
        def apply(t, k, v):
            t.bind(lambda x: ts[k].map(lambda v: dict(x, **{k: v})))
        for k, v in ts.iteritems():
            apply(t, k, v)
        self.assertThunksEqual(t, Thunk({'a': 1, 'b': 1}))