74fe4de67e45a15deed238920714844e360ca1a7
[coq-hetmet.git] / examples / Demo.hs
1 {-# OPTIONS_GHC -XModalTypes -fflatten -funsafe-skolemize -dcore-lint #-}
2 module Demo (demo) where
3
4
5 --demo con mer = <[ ~~mer ~~(con (2::Int)) ~~(con (12::Int)) ]>
6
7 demo const mult =
8    <[ let four   = ~~mult four ~~(const  4)
9 --          twelve = {- {- ~~mult four -}  ~~(const 12) -} four
10       in  four
11     ]>
12
13 demo ::
14     forall a c . 
15          (Int -> <[a]>@c) -> 
16         <[a -> a -> a]>@c ->
17         <[a]>@c
18
19 {-
20 demo const mult =
21  <[ let     twelve = ~~(const (12::Int))
22     in let  four    = ~~(const (4::Int))
23          in  ~~mult four twelve  ]>
24 -}
25 {-
26 demo const mult =
27  <[ let     twelve = ~~(const (12::Int))
28     in let  twelvea = twelve
29             four    = ~~(const (4::Int))
30             twelveb = twelve
31          in  ~~mult (~~mult twelvea four) (~~mult twelveb twelveb) ]>
32 -}
33
34 {-
35 demo const mult = demo' 3
36  where
37   demo' 0 = const 12
38   demo' 1 = const 12
39   demo' n = <[ ~~mult ~~(demo' (n-1)) ~~(demo' (n-2)) ]>
40 -}