--- /dev/null
+definition module nt
+
+:: NT a
+:: RT a
--- /dev/null
+implementation module nt
+
+:: NT a =: NT a
+:: RT a = RT a
--- /dev/null
+module test
+
+Start :: [Char] -> [Char]
+Start cs = cs
--- /dev/null
+definition module eval
+
+from test import :: DSL
+
+eval :: DSL -> Int
--- /dev/null
+implementation module eval
+
+import StdEnv
+import test
+
+eval :: DSL -> Int
+eval (Lit i) = i
+eval (Var def) = let (i In d) = def (Lit i) in eval d
+eval (a +. b) = eval a + eval b
--- /dev/null
+definition module pprint
+
+from test import :: DSL
+
+pprint :: DSL -> String
--- /dev/null
+implementation module pprint
+
+import Control.Applicative
+import Control.Monad => qualified join
+import Control.Monad.Reader
+import Control.Monad.Identity
+import Data.Func
+import Data.Functor
+import Data.List
+import Text
+import StdEnv
+
+import test
+
+:: DSL | PPrintVar String
+
+pprint :: DSL -> String
+pprint d = concat $ runReader (print d) ["x" +++ toString i\\i<-[0..]]
+
+print :: DSL -> Reader [String] [String]
+print (Lit i) = pure $ pure $ toString i
+print (PPrintVar s) = pure $ pure s
+print (Var def) = asks hd >>= \v->
+ let (i In d) = def (PPrintVar v)
+ in local tl $ ((++) ["var ",v,"=",toString i," in\n"]) <$> print d
+print (a +. b) = liftA2 (\as bs->as++["+":bs]) (print a) (print b)
--- /dev/null
+definition module test
+
+:: In a b = In infix 0 a b
+:: DSL
+ = Lit Int
+ | Var (DSL -> In Int DSL)
+ | (+.) infixl 6 DSL DSL
+ | ..
--- /dev/null
+implementation module test
+
+import pprint, eval
+
+Start = (pprint expr, eval expr)
+where
+ expr = Var \x=4 In Lit 38 +. x
--- /dev/null
+module test
+
+import StdEnv
+
+f = (+) 4
+
+Start = f 6
--- /dev/null
+module test
+
+import StdEnv
+
+class type a | c1 a & TC a
+
+class c1 a :: a -> Int
+class rtrn v :: v ()
+class arith v
+where
+ (+.) :: (v a) (v a) -> (v a) | type, + a
+
+//:: WMT = E.e v: WMT (v e) & type e & iTask e & rtrn v & arith v
+:: WMT = E.e v: WMT (v e) & type e & rtrn v & arith v
+
+Start :: [WMT]
+Start =
+ [undef
+ ,undef
+ ]
--- /dev/null
+module test
+
+import StdEnv => qualified return
+import iTasks
+
+derive class iTask UInt8
+
+Start w = startEngine t w
+
+:: UInt8 =: UInt8 Int
+
+t :: Task UInt8
+t = enterInformation () []
--- /dev/null
+module test
+
+//Start = let! a = 4 in a
+Start
+#! a = 4
+= a