-
Notifications
You must be signed in to change notification settings - Fork 4
/
handle.clj
38 lines (30 loc) · 837 Bytes
/
handle.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(ns jaskell.handle
(:import (java.util.function Function Supplier)))
(defmacro def-generator-0 [name [clz handler]]
`(defmacro ~name [[] & body#]
`(reify ~'~clz
(~'~handler [_]
~@body#))))
(defmacro def-generator-1 [name [clz handler]]
`(defmacro ~name [[arg#] & body#]
`(reify ~'~clz
(~'~handler [_ ~arg#]
~@body#))))
(defmacro def-generator-2 [name [clz handler]]
`(defmacro ~name [[a# b#] & body#]
`(reify ~'~clz
(~'~handler [_ ~a# ~b#]
~@body#))))
(defmacro supplier [_ & body]
`(reify Supplier
(get [_]
~@body)))
(defmacro function [[arg] & body]
`(reify Function
(apply [_ ~arg]
~@body)))
;(def-generator-1 function [Function apply])
(defmacro runnable [[_] & body]
`(reify Runnable
(run [_]
~@body)))