Created
January 11, 2022 20:01
-
-
Save jemc/94e80a1173fa91a80f822988b5c32b7f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface val Auth | |
fun val apply[B: Auth val](): B ? => | |
this as B | |
fun val add(that: Auth): AuthSet => | |
AuthSet(this, that) | |
class val AuthSet is Auth | |
let _a: Auth | |
let _b: Auth | |
new val create(a: Auth, b: Auth) => | |
_a = a | |
_b = b | |
fun val apply[B: Auth val](): B ? => | |
try | |
_a[B]()? | |
else | |
_b[B]()? | |
end | |
primitive AmbientAuth2 is Auth | |
new create(auth: AmbientAuth) => None | |
primitive FooAuth is Auth | |
new create(auth: AmbientAuth2) => None | |
primitive BarAuth is Auth | |
new create(auth: AmbientAuth2) => None | |
primitive Foo2Auth is Auth | |
new create(auth: FooAuth) => None | |
primitive Bar2Auth is Auth | |
new create(auth: BarAuth) => None | |
primitive FooBar2Auth is Auth | |
new create(auth1: FooAuth, auth2: BarAuth) => None | |
actor Main | |
new create(env: Env) => | |
try | |
let auth = AmbientAuth2(env.root as AmbientAuth) | |
let foo = FooAuth(auth) | |
let bar = BarAuth(auth) | |
let both = foo + bar | |
let foo2 = Foo2Auth(both[FooAuth]()?) | |
let bar2 = Bar2Auth(both[BarAuth]()?) | |
let both2 = FooBar2Auth(both[FooAuth]()?, both[BarAuth]()?) | |
env.out.print("ok") | |
else | |
env.out.print("not ok") | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment