5 pure(a) :: a -> (Int, a) {
9 fmap(f, ma) :: (a -> b) -> (Int, a) -> (Int, b) {
10 var t = ma.snd; //copy to avoid editing ma by reference
11 if (ma.fst == 0) { return ma; }
19 bind(ma, f) :: (Int, a) -> (a -> (Int, b)) -> (Int, b) {
20 if (ma.fst == 0) { return ma; }
29 var n = (0, False); //ugly that we need the additional parameter
31 var jf = fmap(\b->!b, j);
32 var nf = fmap(\b->!b, n);
34 var fma = \b -> pure(!b);
36 var bjf = bind(j, fma);
37 bar bnf = bind(n, fma);
39 print("fmap Just false: ", jf.fst, jf.snd, "\n");
40 print("fmap Nothing: ", nf.fst, "\n");
42 print("bind Just False: ", bjf.fst, bjf.snd, "\n");
43 print("bind Nothing: ", bnf.fst, "\n");