namespace MyDo
  export
  (>>=) : a -> (a -> IO b) -> IO b
  (>>=) val k = k val

  export
  (>>) : a -> IO b -> IO b
  a >> f = a >>= const f

foo : IO ()
foo = MyDo.do
         x <- "Silly"
         putStrLn x

namespace A
  namespace B
    export
    (>>=) : Nat -> (() -> Nat) -> Nat
    (>>=) x fy = x + (fy ())

    export
    (>>) : Nat -> Nat -> Nat
    a >> f = a >>= const f

test : Nat
test = B.A.do
         5
         _ <- 6
         7

test2 : Nat
test2 = A.B.do
         5
         _ <- 6
         7