+ toBC b = toChar $ consIndex{|*|} b + 1
+
+instance Semigroup (ByteCode a p) where
+ mappend m n = BC \s->let (b1, (b2, t)) = runBC m <$> runBC m s in (b1 ++ b2, t)
+
+instance Monoid (ByteCode a p) where
+ mempty = retrn []
+
+(<++>) infixl 2 :: (ByteCode a p) (ByteCode b q) -> ByteCode c r
+(<++>) m n = BC \s->let (b1, (b2, t)) = runBC n <$> runBC m s in (b1 ++ b2, t)
+
+(<+->) infixr 1
+(<+->) m n :== m <++> retrn n
+
+runBC (BC m) = m
+
+retrn :: ([BC] -> ByteCode a p)
+retrn = BC o tuple