* setVar allows `Var a` to be set to any value, the value is not constrained to be of type `a`. This seems necessary to allow, eg, `setVar v (Output (cmd "read"))`. On other hand, it's subptimal when using setVar with a Arith; in this case `a` should be some Integral. * Allow: test (n `TEqual` 42) Perhaps by making Test an instance of Num? * globalVar and withEnv take a Text name of the variable, and if it's not a legal shell variable name, can generate broken shell code. * The EnvWrap and Raw constructors are an ugly hack around Expr not containing an AST for shell scripts. withEnv needs them to determine which way to set the local environment variable. An AST would improve the internals.