mb give up on node labels and just have node labels be references but have have a mechanism to make namespaces into 1st class objects and to use them in the way i was using the supernode before
library fns to do the graph and category constructs in vaughan pratt's category theory handout
as nodes are fns, edge sets of vertices can be defined 'lazily'
homset: edges between given 2 vertices
slices:
1: -> [1 2 3 ...]
1:4 -> [1 2 3 4]
1:10:2 -> [1 3 5 7 9]
:3 -> [0 1 2 3]
: -> [0 1 2 3 ... ]
1:4.1 == 1
1:10.-1 == 10
1:10.[-1 2 -3] == [[1:10].-1 [1:10].2 [1:10].-3] == [10 3 8]
1:5.: == (1:5).(:) == [1 2 3 4 5]
./ note that no error is raised when indexing a graph node with a list of indicies, some of which are edge labels not present in the node /.
1:5.1:3 == (1:5).(1:3) == [2 3 4]
1:5.:3 == (1:5).(:3) == [1 2 3 4]
1:5.2: == (1:5).(2:) == [3 4 5]
[a==1
to achieve this, the default node
slicable: (int list) slicable = slicable
capitalize for types or ?x for pattern vars? eg ?: list: int (?x list) = ?x eg cap: List: Int (x List) = x eg both: Int (?x List) = ?x note: types that take args must always be fully applied in order to disambiguate b/t application of the parameterized type and application of an instance of the type to a value. fully parensethized too. you can always just use _:
(_ List) len = Int
behaviors are just null interfaces?? no, they are more like subinterfaces. well, mb thats ok.
in addition to mb, ' somehow denotes which edges are metadata
oot notes
see also [1]