blob: 994850245693b850c9568ca6522766fdb7e8b654 (
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
|
module TypeKwonDo where
import Data.Tuple (Tuple(..), fst)
import Prelude
import Unsafe.Coerce (unsafeCoerce)
f :: Int -> String
f = unsafeCoerce unit
g :: String -> Char
g = unsafeCoerce unit
h :: Int -> Char
h x = g $ f x
data A
data B
data C
q :: A -> B
q = unsafeCoerce unit
w :: B -> C
w = unsafeCoerce unit
e :: A -> C
e x = w $ q x
data X
data Y
data Z
xz :: X -> Z
xz = unsafeCoerce unit
yz :: Y -> Z
yz = unsafeCoerce unit
xform :: Tuple X Y -> Tuple Z Z
xform (Tuple a b) = Tuple (xz a) (yz b)
munge :: forall x y z w.
(x -> y)
-> (y -> (Tuple w z))
-> x
-> w
munge f1 f2 a = fst (f2 (f1 a))
|