blob: bb054a1061c65f81416bb7f60e8cecf5cd1e0817 (
plain)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
module Unlambda.Builtins (
k,
s,
i,
dot,
r,
d,
c,
e
) where
import Control.Exception( Exception(..), throw )
data MyException = MyException { func :: a -> b }
deriving (Show, Eq)
instance Exception MyException
k :: a -> b -> a
k x y = x
s :: (a -> b -> c) -> (a -> b) -> a -> c
s x y z = (x z) (y z)
i :: a -> a
i = id
class Void a where
v :: a -> r
instance Void v => Void (a -> r) where
v x = v
dot :: Char -> a -> IO a
dot ch f = putChar ch >> return f
r :: a -> IO a
r f = putChar '\n' >> return f
-- may not work as per unlambda lazy semantics
d :: (a -> b) -> (a -> b)
d x = (\y -> x y)
c :: (a -> b) -> (a -> b)
c x = (`runCont` id) (callCC $ \cont -> x cont)
e :: a -> b
e x = throw (MyException x)
|