Skip to content

Commit 3610533

Browse files
author
Mike Solomon
authored
Merge pull request #3 from purescript-python/uncurried
Update Uncurried.py
2 parents 4962a17 + 254bd58 commit 3610533

File tree

1 file changed

+228
-39
lines changed

1 file changed

+228
-39
lines changed

python-ffi/Effect/Uncurried.py

Lines changed: 228 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,240 @@
1-
from py_sexpr.stack_vm.emit import module_code
2-
from py_sexpr.terms import *
31

4-
__all__ = []
5-
G = globals()
2+
def mkEffectFn1(fn):
3+
def _mkEffectFn1 (_0):
4+
return fn(_0)()
5+
return _mkEffectFn1
66

77

8-
def make_mkEffectFn(n: int):
9-
myname = "mkEffectFn{}".format(n)
10-
args = ["x{}".format(i) for i in range(n)]
11-
fn = "fn"
12-
fcall = var(fn)
13-
for each in args:
14-
fcall = call(fcall, var(each))
15-
fcall = call(fcall)
16-
meta_code = make_mkEffectFn.__code__
17-
ast = metadata(
18-
meta_code.co_firstlineno,
19-
1,
20-
meta_code.co_filename,
21-
define(myname, [fn], define(None, args, fcall)),
22-
)
23-
code = module_code(ast, name=__name__, filename=__file__)
8+
def mkEffectFn2(fn):
9+
def _mkEffectFn2 (_0,_1):
10+
return fn(_0)(_1)()
11+
return _mkEffectFn2
2412

25-
G[myname] = eval(code)
26-
__all__.append(myname)
2713

14+
def mkEffectFn3(fn):
15+
def _mkEffectFn3 (_0,_1,_2):
16+
return fn(_0)(_1)(_2)()
17+
return _mkEffectFn3
2818

29-
# assert print(mkEffectFn1(lambda x: lambda :2 + x)(3)) == 5
3019

20+
def mkEffectFn4(fn):
21+
def _mkEffectFn4 (_0,_1,_2,_3):
22+
return fn(_0)(_1)(_2)(_3)()
23+
return _mkEffectFn4
3124

32-
def make_runEffectFn(n: int):
33-
myname = "runEffectFn{}".format(n)
34-
args = ["x{}".format(i) for i in range(n)]
35-
fn = "fn"
36-
fcall = call(var(fn), *map(var, args))
37-
lam = define(None, [], fcall)
38-
for arg in reversed(args):
39-
lam = define(None, [arg], lam)
4025

41-
meta_code = make_runEffectFn.__code__
42-
ast = metadata(meta_code.co_firstlineno, 1, meta_code.co_filename, lam,)
43-
code = module_code(ast, name=__name__, filename=__file__)
26+
def mkEffectFn5(fn):
27+
def _mkEffectFn5 (_0,_1,_2,_3,_4):
28+
return fn(_0)(_1)(_2)(_3)(_4)()
29+
return _mkEffectFn5
4430

45-
G[myname] = eval(code)
46-
__all__.append(myname)
31+
32+
def mkEffectFn6(fn):
33+
def _mkEffectFn6 (_0,_1,_2,_3,_4,_5):
34+
return fn(_0)(_1)(_2)(_3)(_4)(_5)()
35+
return _mkEffectFn6
36+
37+
38+
def mkEffectFn7(fn):
39+
def _mkEffectFn7 (_0,_1,_2,_3,_4,_5,_6):
40+
return fn(_0)(_1)(_2)(_3)(_4)(_5)(_6)()
41+
return _mkEffectFn7
42+
43+
44+
def mkEffectFn8(fn):
45+
def _mkEffectFn8 (_0,_1,_2,_3,_4,_5,_6,_7):
46+
return fn(_0)(_1)(_2)(_3)(_4)(_5)(_6)(_7)()
47+
return _mkEffectFn8
48+
49+
50+
def mkEffectFn9(fn):
51+
def _mkEffectFn9 (_0,_1,_2,_3,_4,_5,_6,_7,_8):
52+
return fn(_0)(_1)(_2)(_3)(_4)(_5)(_6)(_7)(_8)()
53+
return _mkEffectFn9
54+
55+
56+
def mkEffectFn10(fn):
57+
def _mkEffectFn10 (_0,_1,_2,_3,_4,_5,_6,_7,_8,_9):
58+
return fn(_0)(_1)(_2)(_3)(_4)(_5)(_6)(_7)(_8)(_9)()
59+
return _mkEffectFn10
60+
61+
62+
def runEffectFn1(fn):
63+
def _runEffectFn1(_1):
64+
def _runEffectFn2():
65+
return fn(_1)
66+
return _runEffectFn2
67+
return _runEffectFn1
68+
69+
70+
71+
def runEffectFn2(fn):
72+
def _runEffectFn1(_1):
73+
def _runEffectFn2(_2):
74+
def _runEffectFn3():
75+
return fn(_1,_2)
76+
return _runEffectFn3
77+
return _runEffectFn2
78+
return _runEffectFn1
79+
80+
81+
82+
def runEffectFn3(fn):
83+
def _runEffectFn1(_1):
84+
def _runEffectFn2(_2):
85+
def _runEffectFn3(_3):
86+
def _runEffectFn4():
87+
return fn(_1,_2,_3)
88+
return _runEffectFn4
89+
return _runEffectFn3
90+
return _runEffectFn2
91+
return _runEffectFn1
92+
93+
94+
95+
def runEffectFn4(fn):
96+
def _runEffectFn1(_1):
97+
def _runEffectFn2(_2):
98+
def _runEffectFn3(_3):
99+
def _runEffectFn4(_4):
100+
def _runEffectFn5():
101+
return fn(_1,_2,_3,_4)
102+
return _runEffectFn5
103+
return _runEffectFn4
104+
return _runEffectFn3
105+
return _runEffectFn2
106+
return _runEffectFn1
107+
108+
109+
110+
def runEffectFn5(fn):
111+
def _runEffectFn1(_1):
112+
def _runEffectFn2(_2):
113+
def _runEffectFn3(_3):
114+
def _runEffectFn4(_4):
115+
def _runEffectFn5(_5):
116+
def _runEffectFn6():
117+
return fn(_1,_2,_3,_4,_5)
118+
return _runEffectFn6
119+
return _runEffectFn5
120+
return _runEffectFn4
121+
return _runEffectFn3
122+
return _runEffectFn2
123+
return _runEffectFn1
124+
125+
126+
127+
def runEffectFn6(fn):
128+
def _runEffectFn1(_1):
129+
def _runEffectFn2(_2):
130+
def _runEffectFn3(_3):
131+
def _runEffectFn4(_4):
132+
def _runEffectFn5(_5):
133+
def _runEffectFn6(_6):
134+
def _runEffectFn7():
135+
return fn(_1,_2,_3,_4,_5,_6)
136+
return _runEffectFn7
137+
return _runEffectFn6
138+
return _runEffectFn5
139+
return _runEffectFn4
140+
return _runEffectFn3
141+
return _runEffectFn2
142+
return _runEffectFn1
143+
144+
145+
146+
def runEffectFn7(fn):
147+
def _runEffectFn1(_1):
148+
def _runEffectFn2(_2):
149+
def _runEffectFn3(_3):
150+
def _runEffectFn4(_4):
151+
def _runEffectFn5(_5):
152+
def _runEffectFn6(_6):
153+
def _runEffectFn7(_7):
154+
def _runEffectFn8():
155+
return fn(_1,_2,_3,_4,_5,_6,_7)
156+
return _runEffectFn8
157+
return _runEffectFn7
158+
return _runEffectFn6
159+
return _runEffectFn5
160+
return _runEffectFn4
161+
return _runEffectFn3
162+
return _runEffectFn2
163+
return _runEffectFn1
164+
165+
166+
167+
def runEffectFn8(fn):
168+
def _runEffectFn1(_1):
169+
def _runEffectFn2(_2):
170+
def _runEffectFn3(_3):
171+
def _runEffectFn4(_4):
172+
def _runEffectFn5(_5):
173+
def _runEffectFn6(_6):
174+
def _runEffectFn7(_7):
175+
def _runEffectFn8(_8):
176+
def _runEffectFn9():
177+
return fn(_1,_2,_3,_4,_5,_6,_7,_8)
178+
return _runEffectFn9
179+
return _runEffectFn8
180+
return _runEffectFn7
181+
return _runEffectFn6
182+
return _runEffectFn5
183+
return _runEffectFn4
184+
return _runEffectFn3
185+
return _runEffectFn2
186+
return _runEffectFn1
187+
188+
189+
190+
def runEffectFn9(fn):
191+
def _runEffectFn1(_1):
192+
def _runEffectFn2(_2):
193+
def _runEffectFn3(_3):
194+
def _runEffectFn4(_4):
195+
def _runEffectFn5(_5):
196+
def _runEffectFn6(_6):
197+
def _runEffectFn7(_7):
198+
def _runEffectFn8(_8):
199+
def _runEffectFn9(_9):
200+
def _runEffectFn10():
201+
return fn(_1,_2,_3,_4,_5,_6,_7,_8,_9)
202+
return _runEffectFn10
203+
return _runEffectFn9
204+
return _runEffectFn8
205+
return _runEffectFn7
206+
return _runEffectFn6
207+
return _runEffectFn5
208+
return _runEffectFn4
209+
return _runEffectFn3
210+
return _runEffectFn2
211+
return _runEffectFn1
212+
213+
214+
215+
def runEffectFn10(fn):
216+
def _runEffectFn1(_1):
217+
def _runEffectFn2(_2):
218+
def _runEffectFn3(_3):
219+
def _runEffectFn4(_4):
220+
def _runEffectFn5(_5):
221+
def _runEffectFn6(_6):
222+
def _runEffectFn7(_7):
223+
def _runEffectFn8(_8):
224+
def _runEffectFn9(_9):
225+
def _runEffectFn10(_10):
226+
def _runEffectFn11():
227+
return fn(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10)
228+
return _runEffectFn11
229+
return _runEffectFn10
230+
return _runEffectFn9
231+
return _runEffectFn8
232+
return _runEffectFn7
233+
return _runEffectFn6
234+
return _runEffectFn5
235+
return _runEffectFn4
236+
return _runEffectFn3
237+
return _runEffectFn2
238+
return _runEffectFn1
47239

48240

49-
for i in range(1, 11):
50-
make_mkEffectFn(i)
51-
make_runEffectFn(i)

0 commit comments

Comments
 (0)