blob: 4a7d2c7fac4284351bc8bb9299e1d8ca7f827c51 (
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
|
Section FreeMonad.
Variable S : Type.
Variable P : S -> Type.
Inductive FreeF A : Type :=
| retFree : A -> FreeF A
| opr : forall s, (P s -> FreeF A) -> FreeF A.
End FreeMonad.
Section Fibonnacci.
Inductive gen_op := call_op : nat -> gen_op.
Definition gen_ty (op : gen_op) :=
match op with
| call_op _ => nat
end.
Fail Definition fib0 (n:nat) : FreeF gen_op gen_ty nat :=
match n with
| 0
| 1 => retFree _ _ _ 1
| S (S k) =>
opr _ _ _ (call_op (S k))
(fun r1 => opr _ _ _ (call_op k)
(fun r0 => retFree (* _ _ _ *) (r1 + r0)))
end.
End Fibonnacci.
|