Doughlang/samples/receiver.do
2025-08-28 02:26:06 -04:00

60 lines
889 B
Plaintext

#!/usr/bin/env dough
/*
Type = "type" Identifier (<Generics>)? '=' TypeSpec
TypeSpec = (
| Identifier
| str (StructField),* uct
| tup (TupleField),* le
| cho (ChoiceField),* ice
)
StructField = Identifier ':' TypeSpec
TupleField = TypeSpec
EnumField = Identifier ('(' TypeSpec ')')?
*/
// Product type with named fields
type Product<T> = {
a: i32,
b: T,
c: {
d: i32,
e: i32,
f: []
},
};
// Product type with indexed fields
type Tuple<T, U> = (
i32,
T,
U,
);
// Choice/Sum type, which degrades to enumeration
type Sum = Nothing | A(Product) | B(Tuple) ;
// Kotlin style?
type <V> Option = {
None,
Some(V)
}
// fucked up?
type Option<V> (None | Some(V));
fn x(self: &Sum) -> Product {
match self {
Nothing | B(_) => panic(),
A(value) =>
}
}
fun x(a: T<A>) -> A {
a.get()
}