8 :: In a b = In infix 0 a b
11 (<$>) f Nothing = Nothing
12 (<$>) f (Just a) = Just (f a)
17 (<*>) Nothing _ = Nothing
18 (<*>) (Just f) ma = f <$> ma
21 (>>=) (Just x) k = k x
24 var :: ((Maybe a) -> In a (Maybe b)) -> Maybe b
25 var def = let (i In b) = def (pure i) in b
30 (+.) infixl 6 :: (Maybe a) (Maybe a) -> Maybe a | + a
31 (+.) l r = (+) <$> l <*> r
33 (++.) infixr 5 :: (Maybe (arr a)) (Maybe (arr a)) -> Maybe (arr a) | Array arr a
34 (++.) l r = appendArr <$> l <*> r
36 (!.) infixl 8 :: (Maybe (arr a)) (Maybe Int) -> Maybe a | Array arr a
37 (!.) a i = a >>= \a->i >>= \i->if (i < 0 || i >= size a) Nothing (Just a.[i])
39 (=.) infixl 9 :: (Maybe *(arr a)) (Maybe Int, Maybe a) -> (Maybe *(arr a)) | Array arr a
40 (=.) a (i, e) = a >>= \a->i >>= \i->if (i < 0 || i >= size a) Nothing (update a i <$> e)
42 //Start = both (var \v=arr {!1,2,3} In v ++. arr {!4,5,6})
43 //Start = runPrinter (var \v=arr {!1,2,3} In v ++. arr {!4,5,6})
46 // , var \v={!1,2,3} In v ++. v =. (lit 0, lit 42)
48 , var \v={!1,2,3} In v ++. lit {!4,5,6} =. (lit 0, lit 42)
50 , var \v={!1,2,3} In v ++. lit {!4,5,65}
52 , var \v={!1,2,3} In lit {!4,5,6} ++. v
54 // , runMaybe (var \up0=(\a->a =. (lit 0, lit 0)) In up0 (lit {!4,5,6}))