The Str and Symbol types, and ToExpr class, in a module with few
dependencies so modules can make exprs without incurring a dependency on
Derive.BaseTypes, and more importantly, Val, which
drags in tons of stuff.

This is parsed by Parse.p_call_symbol, so it can have any character except
space, =, or ) for val calls. It's not enforced though, especially since
there's an IsString instance, but if you put in a space you'll get a messed
up expression.

Pretty reproduces the Derive.Solkattu.Dsl syntax, which has to be
haskell syntax, so it can't use +, and I have to put thoppi first to avoid
the keyword do. It would be nice if I could make the tracklang syntax
consistent, but maybe not a huge deal at the moment.