ruff 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -3
- data/docs/Ruff.html +1 -1
- data/docs/Ruff/Effect.html +1 -1
- data/docs/Ruff/Handler.html +235 -82
- data/docs/Ruff/Throws.html +1 -1
- data/docs/Ruff/Throws/Eff.html +1 -1
- data/docs/Ruff/Throws/Resend.html +1 -1
- data/docs/_index.html +1 -1
- data/docs/file.README.html +3 -1
- data/docs/index.html +3 -1
- data/docs/method_list.html +8 -0
- data/docs/top-level-namespace.html +1 -1
- data/lib/ruff/handler.rb +66 -11
- data/lib/ruff/version.rb +1 -1
- data/ruff.gemspec +1 -1
- data/version.h +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3a199e337fbcc9469889603567d9c3367d58ce429fd3a486f4fa5b801cd6e1c
|
4
|
+
data.tar.gz: faed13c325a06943194fe5d717569793e229dc1ce11dd04cf5fb4d812794de19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 310c7eb41d54e788c18172bde693d1af6a09cd246e5ebf95fcf7fec03dcce77f9f74750730573327ed8ab928add19b844c92e969e757035ee879da6213b7f44f
|
7
|
+
data.tar.gz: b56af686894b243c13b030b4c50aea7575d26d29d8d93d8c6326baff08307b75c4cfea35865d6c498780fbedabbe16bd207dc95bd1a0704cf631cb071bf6e67e
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
ruff
|
2
2
|
==
|
3
3
|
|
4
|
+
[](https://badge.fury.io/rb/ruff)
|
5
|
+
|
4
6
|
ONE-SHOT Algebraic Effects Library for Ruby!
|
5
7
|
|
6
8
|
```ruby
|
@@ -31,8 +33,5 @@ h1.run{
|
|
31
33
|
# logger: 6
|
32
34
|
```
|
33
35
|
|
34
|
-
# Documentation
|
35
|
-
See [here](https://nymphium.github.io/ruff/).
|
36
|
-
|
37
36
|
# LICENSE
|
38
37
|
MIT
|
data/docs/Ruff.html
CHANGED
@@ -312,7 +312,7 @@ include "../../version.h"</p>
|
|
312
312
|
</div>
|
313
313
|
|
314
314
|
<div id="footer">
|
315
|
-
Generated on
|
315
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
316
316
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
317
317
|
0.9.20 (ruby-2.6.4).
|
318
318
|
</div>
|
data/docs/Ruff/Effect.html
CHANGED
@@ -404,7 +404,7 @@
|
|
404
404
|
</div>
|
405
405
|
|
406
406
|
<div id="footer">
|
407
|
-
Generated on
|
407
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
408
408
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
409
409
|
0.9.20 (ruby-2.6.4).
|
410
410
|
</div>
|
data/docs/Ruff/Handler.html
CHANGED
@@ -104,7 +104,17 @@
|
|
104
104
|
|
105
105
|
</div>
|
106
106
|
|
107
|
+
<h2>Overview</h2><div class="docstring">
|
108
|
+
<div class="discussion">
|
109
|
+
<p>In algebraic effects, handler is an first-class object.</p>
|
110
|
+
|
111
|
+
|
112
|
+
</div>
|
113
|
+
</div>
|
114
|
+
<div class="tags">
|
115
|
+
|
107
116
|
|
117
|
+
</div>
|
108
118
|
|
109
119
|
|
110
120
|
|
@@ -138,7 +148,7 @@
|
|
138
148
|
|
139
149
|
|
140
150
|
|
141
|
-
<span class="summary_desc"><div class='inline'><p>
|
151
|
+
<span class="summary_desc"><div class='inline'><p>makes a new handler, internally having fresh empty hash.</p>
|
142
152
|
</div></span>
|
143
153
|
|
144
154
|
</li>
|
@@ -147,7 +157,7 @@
|
|
147
157
|
<li class="public ">
|
148
158
|
<span class="summary_signature">
|
149
159
|
|
150
|
-
<a href="#on-instance_method" title="#on (instance method)">#<strong>on</strong>(eff, &
|
160
|
+
<a href="#on-instance_method" title="#on (instance method)">#<strong>on</strong>(eff, &fun) ⇒ Handler<A!{Effect<Arg, Ret>, e}, B!{e}> </a>
|
151
161
|
|
152
162
|
|
153
163
|
|
@@ -161,7 +171,7 @@
|
|
161
171
|
|
162
172
|
|
163
173
|
|
164
|
-
<span class="summary_desc"><div class='inline'><p>sets effec handler <code>&
|
174
|
+
<span class="summary_desc"><div class='inline'><p>sets effec handler <code>&fun</code> for <code>eff</code>.</p>
|
165
175
|
</div></span>
|
166
176
|
|
167
177
|
</li>
|
@@ -170,7 +180,7 @@
|
|
170
180
|
<li class="public ">
|
171
181
|
<span class="summary_signature">
|
172
182
|
|
173
|
-
<a href="#run-instance_method" title="#run (instance method)">#<strong>run</strong>(&prc) ⇒
|
183
|
+
<a href="#run-instance_method" title="#run (instance method)">#<strong>run</strong>(&prc) ⇒ B </a>
|
174
184
|
|
175
185
|
|
176
186
|
|
@@ -187,6 +197,29 @@
|
|
187
197
|
<span class="summary_desc"><div class='inline'><p>handles the computation.</p>
|
188
198
|
</div></span>
|
189
199
|
|
200
|
+
</li>
|
201
|
+
|
202
|
+
|
203
|
+
<li class="public ">
|
204
|
+
<span class="summary_signature">
|
205
|
+
|
206
|
+
<a href="#to-instance_method" title="#to (instance method)">#<strong>to</strong>(&fun) ⇒ Handler<A!{e}, B!{e'}> </a>
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
</span>
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
<span class="summary_desc"><div class='inline'><p>sets value handler <code>&fun</code>.</p>
|
221
|
+
</div></span>
|
222
|
+
|
190
223
|
</li>
|
191
224
|
|
192
225
|
|
@@ -213,9 +246,10 @@
|
|
213
246
|
|
214
247
|
</h3><div class="docstring">
|
215
248
|
<div class="discussion">
|
216
|
-
<p>
|
217
|
-
|
218
|
-
This is a effect-handler store and when handliong it is looked up
|
249
|
+
<p>makes a new handler, internally having fresh empty hash.</p>
|
250
|
+
|
251
|
+
<p>This is a effect-handler store and when handliong it is looked up.
|
252
|
+
Value handler is set <code>id</code> function to by default.</p>
|
219
253
|
|
220
254
|
|
221
255
|
</div>
|
@@ -237,15 +271,17 @@ This is a effect-handler store and when handliong it is looked up.</p>
|
|
237
271
|
<pre class="lines">
|
238
272
|
|
239
273
|
|
240
|
-
|
241
|
-
|
242
|
-
|
274
|
+
17
|
275
|
+
18
|
276
|
+
19
|
277
|
+
20</pre>
|
243
278
|
</td>
|
244
279
|
<td>
|
245
|
-
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line
|
280
|
+
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line 17</span>
|
246
281
|
|
247
282
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
|
248
283
|
<span class='ivar'>@handlers</span> <span class='op'>=</span> <span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
|
284
|
+
<span class='ivar'>@handlers</span><span class='lbracket'>[</span><span class='ivar'>@valh_id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tlambda'>-></span><span class='lparen'>(</span><span class='id identifier rubyid_x'>x</span><span class='rparen'>)</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_x'>x</span> <span class='rbrace'>}</span>
|
249
285
|
<span class='kw'>end</span></pre>
|
250
286
|
</td>
|
251
287
|
</tr>
|
@@ -262,7 +298,7 @@ This is a effect-handler store and when handliong it is looked up.</p>
|
|
262
298
|
<div class="method_details first">
|
263
299
|
<h3 class="signature first" id="on-instance_method">
|
264
300
|
|
265
|
-
#<strong>on</strong>(eff, &
|
301
|
+
#<strong>on</strong>(eff, &fun) ⇒ <tt><span class='object_link'><a href="" title="Ruff::Handler (class)">Handler</a></span><A!{<span class='object_link'><a href="Effect.html" title="Ruff::Effect (class)">Effect</a></span><Arg, Ret>, e}, B!{e}></tt>
|
266
302
|
|
267
303
|
|
268
304
|
|
@@ -270,7 +306,7 @@ This is a effect-handler store and when handliong it is looked up.</p>
|
|
270
306
|
|
271
307
|
</h3><div class="docstring">
|
272
308
|
<div class="discussion">
|
273
|
-
<p>sets effec handler <code>&
|
309
|
+
<p>sets effec handler <code>&fun</code> for <code>eff</code></p>
|
274
310
|
|
275
311
|
|
276
312
|
</div>
|
@@ -307,7 +343,7 @@ This is a effect-handler store and when handliong it is looked up.</p>
|
|
307
343
|
|
308
344
|
<li>
|
309
345
|
|
310
|
-
<span class='name'>
|
346
|
+
<span class='name'>fun</span>
|
311
347
|
|
312
348
|
|
313
349
|
<span class='type'>(<tt>Proc<Arg, Ret => A></tt>)</span>
|
@@ -316,7 +352,7 @@ This is a effect-handler store and when handliong it is looked up.</p>
|
|
316
352
|
|
317
353
|
—
|
318
354
|
<div class='inline'><p>a handler to handle <code>eff</code>;
|
319
|
-
First argument of <code>&
|
355
|
+
First argument of <code>&fun</code> is <em>continuation</em>, proc object
|
320
356
|
to go back to the handled computation.</p>
|
321
357
|
</div>
|
322
358
|
|
@@ -330,7 +366,7 @@ to go back to the handled computation.</p>
|
|
330
366
|
<li>
|
331
367
|
|
332
368
|
|
333
|
-
<span class='type'>(<tt><span class='object_link'><a href="" title="Ruff::Handler (class)">Handler</a></span
|
369
|
+
<span class='type'>(<tt><span class='object_link'><a href="" title="Ruff::Handler (class)">Handler</a></span><A!{<span class='object_link'><a href="Effect.html" title="Ruff::Effect (class)">Effect</a></span><Arg, Ret>, e}, B!{e}></tt>)</span>
|
334
370
|
|
335
371
|
|
336
372
|
|
@@ -348,17 +384,17 @@ to go back to the handled computation.</p>
|
|
348
384
|
<pre class="lines">
|
349
385
|
|
350
386
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
387
|
+
79
|
388
|
+
80
|
389
|
+
81
|
390
|
+
82
|
391
|
+
83</pre>
|
356
392
|
</td>
|
357
393
|
<td>
|
358
|
-
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line
|
394
|
+
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line 79</span>
|
359
395
|
|
360
|
-
<span class='kw'>def</span> <span class='id identifier rubyid_on'>on</span><span class='lparen'>(</span><span class='id identifier rubyid_eff'>eff</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier
|
361
|
-
<span class='ivar'>@handlers</span><span class='lbracket'>[</span><span class='id identifier rubyid_eff'>eff</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier
|
396
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_on'>on</span><span class='lparen'>(</span><span class='id identifier rubyid_eff'>eff</span><span class='comma'>,</span> <span class='op'>&</span><span class='id identifier rubyid_fun'>fun</span><span class='rparen'>)</span>
|
397
|
+
<span class='ivar'>@handlers</span><span class='lbracket'>[</span><span class='id identifier rubyid_eff'>eff</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_fun'>fun</span>
|
362
398
|
|
363
399
|
<span class='kw'>self</span>
|
364
400
|
<span class='kw'>end</span></pre>
|
@@ -370,7 +406,7 @@ to go back to the handled computation.</p>
|
|
370
406
|
<div class="method_details ">
|
371
407
|
<h3 class="signature " id="run-instance_method">
|
372
408
|
|
373
|
-
#<strong>run</strong>(&prc) ⇒ <tt>
|
409
|
+
#<strong>run</strong>(&prc) ⇒ <tt>B</tt>
|
374
410
|
|
375
411
|
|
376
412
|
|
@@ -416,9 +452,13 @@ to go back to the handled computation.</p>
|
|
416
452
|
<span class='name'>prc</span>
|
417
453
|
|
418
454
|
|
419
|
-
<span class='type'>(<tt>Proc<(),
|
455
|
+
<span class='type'>(<tt>Proc<(), A></tt>)</span>
|
456
|
+
|
420
457
|
|
421
458
|
|
459
|
+
—
|
460
|
+
<div class='inline'><p>a thunk to be handled and returns <code>A</code></p>
|
461
|
+
</div>
|
422
462
|
|
423
463
|
</li>
|
424
464
|
|
@@ -430,10 +470,14 @@ to go back to the handled computation.</p>
|
|
430
470
|
<li>
|
431
471
|
|
432
472
|
|
433
|
-
<span class='type'>(<tt>
|
473
|
+
<span class='type'>(<tt>B</tt>)</span>
|
434
474
|
|
435
475
|
|
436
476
|
|
477
|
+
—
|
478
|
+
<div class='inline'><p>a value modified by value handler <code>Proc<A, B></code> , or returned from the effect handler throwing continuation away</p>
|
479
|
+
</div>
|
480
|
+
|
437
481
|
</li>
|
438
482
|
|
439
483
|
</ul>
|
@@ -444,61 +488,61 @@ to go back to the handled computation.</p>
|
|
444
488
|
<pre class="lines">
|
445
489
|
|
446
490
|
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
491
|
+
108
|
492
|
+
109
|
493
|
+
110
|
494
|
+
111
|
495
|
+
112
|
496
|
+
113
|
497
|
+
114
|
498
|
+
115
|
499
|
+
116
|
500
|
+
117
|
501
|
+
118
|
502
|
+
119
|
503
|
+
120
|
504
|
+
121
|
505
|
+
122
|
506
|
+
123
|
507
|
+
124
|
508
|
+
125
|
509
|
+
126
|
510
|
+
127
|
511
|
+
128
|
512
|
+
129
|
513
|
+
130
|
514
|
+
131
|
515
|
+
132
|
516
|
+
133
|
517
|
+
134
|
518
|
+
135
|
519
|
+
136
|
520
|
+
137
|
521
|
+
138
|
522
|
+
139
|
523
|
+
140
|
524
|
+
141
|
525
|
+
142
|
526
|
+
143
|
527
|
+
144
|
528
|
+
145
|
529
|
+
146
|
530
|
+
147
|
531
|
+
148
|
532
|
+
149
|
533
|
+
150
|
534
|
+
151
|
535
|
+
152
|
536
|
+
153
|
537
|
+
154
|
538
|
+
155
|
539
|
+
156
|
540
|
+
157
|
541
|
+
158
|
542
|
+
159</pre>
|
499
543
|
</td>
|
500
544
|
<td>
|
501
|
-
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line
|
545
|
+
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line 108</span>
|
502
546
|
|
503
547
|
<span class='kw'>def</span> <span class='id identifier rubyid_run'>run</span><span class='lparen'>(</span><span class='op'>&</span><span class='id identifier rubyid_prc'>prc</span><span class='rparen'>)</span>
|
504
548
|
<span class='id identifier rubyid_co'>co</span> <span class='op'>=</span> <span class='const'>Fiber</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='op'>&</span><span class='id identifier rubyid_prc'>prc</span>
|
@@ -519,7 +563,7 @@ to go back to the handled computation.</p>
|
|
519
563
|
<span class='const'>Fiber</span><span class='period'>.</span><span class='id identifier rubyid_yield'>yield</span> <span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Throws/Resend.html" title="Ruff::Throws::Resend (class)">Resend</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Throws/Resend.html#initialize-instance_method" title="Ruff::Throws::Resend#initialize (method)">new</a></span></span> <span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='id identifier rubyid_rehandles'>rehandles</span><span class='lbracket'>[</span><span class='id identifier rubyid_r'>r</span><span class='period'>.</span><span class='id identifier rubyid_k'>k</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
520
564
|
<span class='kw'>end</span>
|
521
565
|
<span class='kw'>else</span>
|
522
|
-
<span class='id identifier rubyid_r'>r</span>
|
566
|
+
<span class='ivar'>@handlers</span><span class='lbracket'>[</span><span class='ivar'>@valh_id</span><span class='rbracket'>]</span><span class='period'>.</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='rparen'>)</span>
|
523
567
|
<span class='kw'>end</span>
|
524
568
|
<span class='rbrace'>}</span>
|
525
569
|
|
@@ -555,6 +599,115 @@ to go back to the handled computation.</p>
|
|
555
599
|
</td>
|
556
600
|
</tr>
|
557
601
|
</table>
|
602
|
+
</div>
|
603
|
+
|
604
|
+
<div class="method_details ">
|
605
|
+
<h3 class="signature " id="to-instance_method">
|
606
|
+
|
607
|
+
#<strong>to</strong>(&fun) ⇒ <tt><span class='object_link'><a href="" title="Ruff::Handler (class)">Handler</a></span><A!{e}, B!{e'}></tt>
|
608
|
+
|
609
|
+
|
610
|
+
|
611
|
+
|
612
|
+
|
613
|
+
</h3><div class="docstring">
|
614
|
+
<div class="discussion">
|
615
|
+
<p>sets value handler <code>&fun</code>.</p>
|
616
|
+
|
617
|
+
<p>Value handler is the handler for <em>the result value of the computation</em>.
|
618
|
+
For example, <code>Handler.new.to{|_x| 0}.run { value }</code> results in <code>0</code> .</p>
|
619
|
+
|
620
|
+
<p>The value handler modifies the result of the call of continuation in effect handlers of the handler.</p>
|
621
|
+
|
622
|
+
|
623
|
+
</div>
|
624
|
+
</div>
|
625
|
+
<div class="tags">
|
626
|
+
|
627
|
+
<div class="examples">
|
628
|
+
<p class="tag_title">Examples:</p>
|
629
|
+
|
630
|
+
|
631
|
+
<pre class="example code"><code><span class='id identifier rubyid_logs'>logs</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
632
|
+
<span class='id identifier rubyid_handler'>handler</span><span class='period'>.</span><span class='id identifier rubyid_on'>on</span><span class='lparen'>(</span><span class='const'>Log</span><span class='rparen'>)</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_msg'>msg</span><span class='op'>|</span>
|
633
|
+
<span class='id identifier rubyid_logs'>logs</span> <span class='op'><<</span> <span class='id identifier rubyid_msg'>msg</span>
|
634
|
+
<span class='id identifier rubyid_k'>k</span><span class='lbracket'>[</span><span class='rbracket'>]</span>
|
635
|
+
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_to'>to</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span>
|
636
|
+
<span class='id identifier rubyid_logs'>logs</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_log'>log</span><span class='op'>|</span>
|
637
|
+
<span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Logger: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_log'>log</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
638
|
+
<span class='rbrace'>}</span>
|
639
|
+
|
640
|
+
<span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>returns </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_x'>x</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
641
|
+
<span class='rbrace'>}</span>
|
642
|
+
<span class='period'>.</span><span class='id identifier rubyid_run'>run</span> <span class='lbrace'>{</span>
|
643
|
+
<span class='const'>Log</span><span class='period'>.</span><span class='id identifier rubyid_perform'>perform</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>hello</span><span class='tstring_end'>"</span></span>
|
644
|
+
<span class='const'>Log</span><span class='period'>.</span><span class='id identifier rubyid_perform'>perform</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>world</span><span class='tstring_end'>"</span></span>
|
645
|
+
<span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>!</span><span class='tstring_end'>"</span></span>
|
646
|
+
<span class='rbrace'>}</span>
|
647
|
+
|
648
|
+
<span class='comment'>## ==>
|
649
|
+
</span><span class='comment'># msg>> hello
|
650
|
+
</span><span class='comment'># msg>> world
|
651
|
+
</span><span class='comment'># returns !</span></code></pre>
|
652
|
+
|
653
|
+
</div>
|
654
|
+
<p class="tag_title">Parameters:</p>
|
655
|
+
<ul class="param">
|
656
|
+
|
657
|
+
<li>
|
658
|
+
|
659
|
+
<span class='name'>fun</span>
|
660
|
+
|
661
|
+
|
662
|
+
<span class='type'>(<tt>Proc<A, B></tt>)</span>
|
663
|
+
|
664
|
+
|
665
|
+
|
666
|
+
—
|
667
|
+
<div class='inline'><p>value handler</p>
|
668
|
+
</div>
|
669
|
+
|
670
|
+
</li>
|
671
|
+
|
672
|
+
</ul>
|
673
|
+
|
674
|
+
<p class="tag_title">Returns:</p>
|
675
|
+
<ul class="return">
|
676
|
+
|
677
|
+
<li>
|
678
|
+
|
679
|
+
|
680
|
+
<span class='type'>(<tt><span class='object_link'><a href="" title="Ruff::Handler (class)">Handler</a></span><A!{e}, B!{e'}></tt>)</span>
|
681
|
+
|
682
|
+
|
683
|
+
|
684
|
+
</li>
|
685
|
+
|
686
|
+
</ul>
|
687
|
+
|
688
|
+
</div><table class="source_code">
|
689
|
+
<tr>
|
690
|
+
<td>
|
691
|
+
<pre class="lines">
|
692
|
+
|
693
|
+
|
694
|
+
57
|
695
|
+
58
|
696
|
+
59
|
697
|
+
60
|
698
|
+
61</pre>
|
699
|
+
</td>
|
700
|
+
<td>
|
701
|
+
<pre class="code"><span class="info file"># File 'lib/ruff/handler.rb', line 57</span>
|
702
|
+
|
703
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_to'>to</span><span class='lparen'>(</span><span class='op'>&</span><span class='id identifier rubyid_fun'>fun</span><span class='rparen'>)</span>
|
704
|
+
<span class='ivar'>@handlers</span><span class='lbracket'>[</span><span class='ivar'>@valh_id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_fun'>fun</span>
|
705
|
+
|
706
|
+
<span class='kw'>self</span>
|
707
|
+
<span class='kw'>end</span></pre>
|
708
|
+
</td>
|
709
|
+
</tr>
|
710
|
+
</table>
|
558
711
|
</div>
|
559
712
|
|
560
713
|
</div>
|
@@ -562,7 +715,7 @@ to go back to the handled computation.</p>
|
|
562
715
|
</div>
|
563
716
|
|
564
717
|
<div id="footer">
|
565
|
-
Generated on
|
718
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
566
719
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
567
720
|
0.9.20 (ruby-2.6.4).
|
568
721
|
</div>
|
data/docs/Ruff/Throws.html
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
</div>
|
111
111
|
|
112
112
|
<div id="footer">
|
113
|
-
Generated on
|
113
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
114
114
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
115
115
|
0.9.20 (ruby-2.6.4).
|
116
116
|
</div>
|
data/docs/Ruff/Throws/Eff.html
CHANGED
@@ -353,7 +353,7 @@
|
|
353
353
|
</div>
|
354
354
|
|
355
355
|
<div id="footer">
|
356
|
-
Generated on
|
356
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
357
357
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
358
358
|
0.9.20 (ruby-2.6.4).
|
359
359
|
</div>
|
@@ -353,7 +353,7 @@
|
|
353
353
|
</div>
|
354
354
|
|
355
355
|
<div id="footer">
|
356
|
-
Generated on
|
356
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
357
357
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
358
358
|
0.9.20 (ruby-2.6.4).
|
359
359
|
</div>
|
data/docs/_index.html
CHANGED
@@ -156,7 +156,7 @@
|
|
156
156
|
</div>
|
157
157
|
|
158
158
|
<div id="footer">
|
159
|
-
Generated on
|
159
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
160
160
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
161
161
|
0.9.20 (ruby-2.6.4).
|
162
162
|
</div>
|
data/docs/file.README.html
CHANGED
@@ -59,6 +59,8 @@
|
|
59
59
|
|
60
60
|
<div id="content"><div id='filecontents'><h1>ruff</h1>
|
61
61
|
|
62
|
+
<p><a href="https://badge.fury.io/rb/ruff"><img src="https://badge.fury.io/rb/ruff.svg" alt="Gem Version"></a></p>
|
63
|
+
|
62
64
|
<p>ONE-SHOT Algebraic Effects Library for Ruby!</p>
|
63
65
|
|
64
66
|
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>ruff</span><span class='tstring_end'>"</span></span>
|
@@ -98,7 +100,7 @@
|
|
98
100
|
</div></div>
|
99
101
|
|
100
102
|
<div id="footer">
|
101
|
-
Generated on
|
103
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
102
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
103
105
|
0.9.20 (ruby-2.6.4).
|
104
106
|
</div>
|
data/docs/index.html
CHANGED
@@ -59,6 +59,8 @@
|
|
59
59
|
|
60
60
|
<div id="content"><div id='filecontents'><h1>ruff</h1>
|
61
61
|
|
62
|
+
<p><a href="https://badge.fury.io/rb/ruff"><img src="https://badge.fury.io/rb/ruff.svg" alt="Gem Version"></a></p>
|
63
|
+
|
62
64
|
<p>ONE-SHOT Algebraic Effects Library for Ruby!</p>
|
63
65
|
|
64
66
|
<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>ruff</span><span class='tstring_end'>"</span></span>
|
@@ -98,7 +100,7 @@
|
|
98
100
|
</div></div>
|
99
101
|
|
100
102
|
<div id="footer">
|
101
|
-
Generated on
|
103
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
102
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
103
105
|
0.9.20 (ruby-2.6.4).
|
104
106
|
</div>
|
data/docs/method_list.html
CHANGED
@@ -156,6 +156,14 @@
|
|
156
156
|
</li>
|
157
157
|
|
158
158
|
|
159
|
+
<li class="odd ">
|
160
|
+
<div class="item">
|
161
|
+
<span class='object_link'><a href="Ruff/Handler.html#to-instance_method" title="Ruff::Handler#to (method)">#to</a></span>
|
162
|
+
<small>Ruff::Handler</small>
|
163
|
+
</div>
|
164
|
+
</li>
|
165
|
+
|
166
|
+
|
159
167
|
|
160
168
|
</ul>
|
161
169
|
</div>
|
@@ -100,7 +100,7 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on
|
103
|
+
Generated on Thu Oct 3 00:38:48 2019 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
105
|
0.9.20 (ruby-2.6.4).
|
106
106
|
</div>
|
data/lib/ruff/handler.rb
CHANGED
@@ -1,40 +1,94 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
# In algebraic effects, handler is an first-class object.
|
1
4
|
class Ruff::Handler
|
2
5
|
include Ruff::Throws
|
3
|
-
|
6
|
+
|
7
|
+
@valh_id = SecureRandom.uuid
|
8
|
+
|
4
9
|
# makes a new handler, internally having fresh empty hash.
|
10
|
+
#
|
5
11
|
# This is a effect-handler store and when handliong it is looked up.
|
12
|
+
# Value handler is set `id` function to by default.
|
13
|
+
#
|
6
14
|
# @example
|
7
15
|
# handler = Handler.new
|
16
|
+
|
8
17
|
def initialize
|
9
18
|
@handlers = Hash.new
|
19
|
+
@handlers[@valh_id] = ->(x) { x }
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# sets value handler `&fun`.
|
24
|
+
#
|
25
|
+
# Value handler is the handler for *the result value of the computation*.
|
26
|
+
# For example, `Handler.new.to{|_x| 0}.run { value }` results in `0` .
|
27
|
+
#
|
28
|
+
# The value handler modifies the result of the call of continuation in effect handlers of the handler.
|
29
|
+
#
|
30
|
+
# @param [Proc<A, B>] fun
|
31
|
+
# value handler
|
32
|
+
# @return [Handler<A!{e}, B!{e'}>]
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# logs = []
|
36
|
+
# handler.on(Log) {|k, msg|
|
37
|
+
# logs << msg
|
38
|
+
# k[]
|
39
|
+
# }.to {|x|
|
40
|
+
# logs.each {|log|
|
41
|
+
# puts "Logger: #{log}"
|
42
|
+
# }
|
43
|
+
#
|
44
|
+
# puts "returns #{x}"
|
45
|
+
# }
|
46
|
+
# .run {
|
47
|
+
# Log.perform "hello"
|
48
|
+
# Log.perform "world"
|
49
|
+
# "!"
|
50
|
+
# }
|
51
|
+
#
|
52
|
+
# ## ==>
|
53
|
+
# # msg>> hello
|
54
|
+
# # msg>> world
|
55
|
+
# # returns !
|
56
|
+
|
57
|
+
def to(&fun)
|
58
|
+
@handlers[@valh_id] = fun
|
59
|
+
|
60
|
+
self
|
10
61
|
end
|
11
62
|
|
12
|
-
# sets effec handler `&
|
63
|
+
# sets effec handler `&fun` for `eff`
|
13
64
|
#
|
14
65
|
# @param [Effect<Arg, Ret>] eff
|
15
66
|
# the effect instance to be handled
|
16
|
-
# @param [Proc<Arg, Ret => A>]
|
67
|
+
# @param [Proc<Arg, Ret => A>] fun
|
17
68
|
# a handler to handle `eff`;
|
18
|
-
# First argument of `&
|
69
|
+
# First argument of `&fun` is *continuation*, proc object
|
19
70
|
# to go back to the handled computation.
|
20
|
-
# @return [Handler{Effect<Arg, Ret>, e}] itself updated with handling `Effect<Arg, Ret>`
|
71
|
+
# @return [Handler<A!{Effect<Arg, Ret>, e}, B!{e}>] itself updated with handling `Effect<Arg, Ret>`
|
21
72
|
#
|
22
73
|
# @example
|
23
74
|
# handler.on(Log) {|k, msg|
|
24
75
|
# puts "Logger: #{msg}"
|
25
76
|
# k[]
|
26
77
|
# }
|
27
|
-
|
28
|
-
|
78
|
+
|
79
|
+
def on(eff, &fun)
|
80
|
+
@handlers[eff.id] = fun
|
29
81
|
|
30
82
|
self
|
31
83
|
end
|
32
84
|
|
33
|
-
# @param [Proc<(), T>] prc
|
34
|
-
# @return [T]
|
35
|
-
#
|
36
85
|
# handles the computation.
|
37
86
|
#
|
87
|
+
# @param [Proc<(), A>] prc
|
88
|
+
# a thunk to be handled and returns `A`
|
89
|
+
# @return [B]
|
90
|
+
# a value modified by value handler `Proc<A, B>` , or returned from the effect handler throwing continuation away
|
91
|
+
#
|
38
92
|
# @example
|
39
93
|
# handler.run {
|
40
94
|
# Log.perform "hello"
|
@@ -50,6 +104,7 @@ class Ruff::Handler
|
|
50
104
|
# Log.perform 3
|
51
105
|
# }
|
52
106
|
# }
|
107
|
+
|
53
108
|
def run(&prc)
|
54
109
|
co = Fiber.new &prc
|
55
110
|
continue = nil
|
@@ -69,7 +124,7 @@ class Ruff::Handler
|
|
69
124
|
Fiber.yield (Resend.new r, rehandles[r.k])
|
70
125
|
end
|
71
126
|
else
|
72
|
-
r
|
127
|
+
@handlers[@valh_id].(r)
|
73
128
|
end
|
74
129
|
}
|
75
130
|
|
data/lib/ruff/version.rb
CHANGED
data/ruff.gemspec
CHANGED
data/version.h
CHANGED
@@ -1 +1 @@
|
|
1
|
-
#define RUFF_VERSION "0.0.
|
1
|
+
#define RUFF_VERSION "0.0.7"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nymphium
|
@@ -83,7 +83,7 @@ homepage: https://github.com/nymphium/ruff
|
|
83
83
|
licenses:
|
84
84
|
- MIT
|
85
85
|
metadata:
|
86
|
-
|
86
|
+
documentation_uri: https://nymphium.github.io/ruff
|
87
87
|
post_install_message:
|
88
88
|
rdoc_options: []
|
89
89
|
require_paths:
|