syntax (ordered by approximate descending ease of typing):
a/b/c: infix, prefix, postfix (todo in many entries i wrote it prefix/infix/postfix)
- subtraction/unary negation/boundary? note: also valid within identifiers
= __set//
() parens// ; note: x( )x is parens parameterized by x
; eol//
' option type unwrap with args/option type wrap/option type unwrap ; also, quote labels ("'LABELA")
, (autoconstructor-contexting)separator/lazy/strict
. reverse and group ie "attribute access"/(either .keyword or .consish (eg +. would be cons))/elementwise
/ bind ie label
-- tight binding -1, eg 0..4-- == 0..(4-1) (more useful: 0..x--); OR maybe comment-to-EOL
==
;; end of block
'' ?string
,, multidim separator/?/?
.. something like reverse and group?/?/? OR range (eg 1..3 == [1 2])
// comment to EOL; OR mb separator between guard and branch in switch statement and similar constructs
! /strict? parallelize? anti-parallelize? get started now (eager evaluation)? unlifted? golang-style channel?/
% division? python's interpolation operator, possibly with syntactic sugar for x % (a,b)?
& /impurity, aliasing | addressof/
* multiply/?/?
_ dummy arg (in argspec) or anonymous autolambda autovariable/privacy (unexported)/?
+ concat (and addition)/?/? mb infix + is short for parameterized parens around a single element, eg e+x is short for e( x )e
{} block (like parens, but doesnt autoclose, and also defines a scope)
: grouping bind? type annotation to EOL?
" ?string
< less than/?/?
> greater than/?/?
? ?/metavariable?/?
[] graph constructor note: not in ISO 646, but is in T.61
| pipe note: not in ISO 646, but is in T.61
@ ?/view? node label eg node annotation of color 'name' eg Haskell-style at-binding?/? note: not in ISO 646, but is in T.61
# comment-to-EOL, at least on first few lines | ?/footnote defn|len/footnote use? view? reserved for DSLs? |strict note: not in ISO 646, but is in T.61
$ ?/metaquote? /interpolate? metavariable? antiquote? note: not in ISO 646, but is in T.61
\ escape EOL or other character note: not in T.61
` argspec? not in T.61
^ (eol?) annotation/node annotation (x^annotationType:annotation) /? note: not in T.61
~ note: not in T.61, apparently hard to type
!!
%%
&&
** exponentiation?
__
++ tight binding +1, eg 0..x++ == 0..(x+1)
:: type annotation to EOG (end of group, eg EOL or close parens or close bracket) (would like a single char for this?)
""
<< >> type annotation? character meta, or use <<< >>> for that?
??
@@ note: not in ISO 646, but is in T.61
## ?/far footnote?/far footnote? note: not in ISO 646, but is in T.61
$$ anon fn helper? interpolation operator?/?/? note: not in ISO 646, but is in T.61
|| pipe with args note: not in ISO 646, but is in T.61
^^ edge annotation
""" HERE document/multiline string//
${} interpolation of arbitrary expressions (as opposed to single identifiers)
""[] autostringify array constructor
-# lazy
lowercase variable; cannot be string-matched by metaprogramming
UPPERCASE label; or, annotation that is not also an identifier
Capitalized language/DSL (macro) keyword? or Ruby-style keyword? or, annotation that is also an identifier
x, x1, .. default variable names for anonymous functions (should this be _, _1, ..?)
X, X1, .. some sort of metaprogrammy variable names (ie these are treated as Capitalized, not UPPERCASE)
potential alpha ids for some things you might think would be punctuation:
div division (but mb %)
pow exponentiation (but mb **)
.+ append to list ([1 2] .+ 3 == [1 2 3] (should we also have a CONS, that preappends at location 0, or is APPEND enough? mb +. is cons, .+ is append?) BUT this would conflict with using prefix . as 'elementwise' (syntactic metaoperator for map) as in OCTAVE
+- and -+: cons and append? but then postfix - isnt a generic 'marker'.. mb that's okay though, make you use a 'section' to mark punctuation, eg (+)- for a marked '+'. Should it be 0 +- [1 2] but [1 2] -+ 3, or should the list be on the left in both cases? 0 +- [1 2] but [1 2] -+ 3 is not totally irregular, the way to remember it is that in both cases, the left-to-right position of the elements is the same as they will be in the resulting list
+, and ,+: cons and append? but then , is not lazy/strict
infixify
'such thats' in patterns (mb something like '?-' ?)
need syntax to turn 'for' (foreach), which is by default parallel, into sequential
similarrly, need notation for reduce when it is non-commutative or even non-associative (fully sequential), because by default reduce is parallel and unordered
See also the older version, [1], which has a bunch of things which are looking for syntax.
probably should reserve a prefix for metaprogrammable punctuation
compiler directives
metadata directives
note: in earlier versions i looked at presence in ISO 646 and T.61 as one measurement of 'easy to type'. But [] is not in ISO 646 (but it is in T.61), and i think {} is not even in T.61. I think we can't really do without frequent [] and {}, and any programmer already has to get a keyword to work with these for other languages. So maybe i should start ignoring ISO 646 and T.61.
note: it seems that a common pattern is for the infix variant of something to mean one thing, and for the prefix/postfix variants to mean two things completely unrelated to the infix variant, but related to each other. Which suggests that we separate the above table into 2 (infix, and prefix/postfix).
---