Skip to content

Instantly share code, notes, and snippets.

@kLabz
Created December 8, 2021 07:20
Show Gist options
  • Select an option

  • Save kLabz/0e682f750fa36df17ad26eacaa3fb5fe to your computer and use it in GitHub Desktop.

Select an option

Save kLabz/0e682f750fa36df17ad26eacaa3fb5fe to your computer and use it in GitHub Desktop.
Haxe GADTs for API endpoints
class Test {
static function main() {
var req = makeRequest(Foo, r -> trace(r.foo));
req.send();
var req2 = makeRequest(Bar(42), r -> trace(r.answer));
req2.send();
}
static function makeRequest<T>(endpoint:Endpoint<T>, handler:T->Void) {
return {
// Replace this with a proper server call
send: () -> handler(switch (endpoint) {
case Foo: {foo: "bar"};
case Bar(v): {answer: v};
})
};
}
}
enum Endpoint<TResponse> {
Foo:Endpoint<FooResponse>;
Bar(v:Int):Endpoint<BarResponse>;
}
typedef FooResponse = {foo:String}
typedef BarResponse = {answer:Int}
@kLabz
Copy link
Copy Markdown
Author

kLabz commented Dec 8, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment