Specification
This document is a work in progress. It's not complete and it's not final.
The purpose of this document is to spec TypeStream language features.
While TypeStream syntax is inspired by
bash, feature parity is a
non goal of the project.
Keywords
TODO
Types
By default, TypeStream doesn't need a syntax to specify types. It can infer
types from context.
- String
- Number
- List
- DataStream
DataStream
In TypeStream, a DataStream is a typed source of data. TypeStream always
outputs structured data (defaulting to encoding data in JSON).
Let's start from some examples:
# words is a "string" stream, meaning each message value is a string
$ cat words # 1,"first word" 2,"second word"
# users is a "record" topic, meaning each message value is structured record (can be avro, json, protobuf, etc..)
$ cat users # 1, [name: Foo, age: 42] 2, [name: Bar, age: 24]
# what happens if we join users and words?
$ join users words
# 1, [users: {name: Foo, age: 42}, words: "first word"]
# 2, [users: {name: Foo, age: 42}, words: "second word"]
Merging data streams
Block expression
Block expressions define anonymous functions that take one parameter. They're
used by TypeStream data operators like each and enrich.
Here's their syntax:
{ <var> -> <pipeline> }
and an example using the each operator:
cat users | each { user -> echo $user }
In the example above, the user variable is bound to each record in the users data stream.