never executed always true always false
1 module HelVM.HelMA.Automata.LazyK.Reducer (
2 reduce,
3 flippedApply,
4 apply,
5 ) where
6
7 import HelVM.HelMA.Automata.LazyK.Lambda
8
9 reduce :: Lambda -> Lambda
10 reduce (App x y) = reduce x `apply` reduce y
11 reduce x = x
12
13 flippedApply :: Lambda -> Lambda -> Lambda
14 flippedApply = flip apply
15
16 apply :: Lambda -> Lambda -> Lambda
17 apply (S `App` x `App` y) z = apply x z `apply` apply y z
18 apply (App K x) _ = x
19 apply I x = x
20 apply Succ (Number x) = Number $! x + 1
21 apply Succ x = error $ "attempted to apply inc to a non-number " <> show x
22 apply f x = App f x