ruff 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/ruff.svg)](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:
|