-use std::any::*;
-use std::sync::*;
+use std::sync::mpsc;
+use std::future::Future;
+use std::pin::Pin;
-pub trait Callable<Args>: Any {
- type Output;
- fn curry_fn() -> fn(Self, Args) -> Self::Output;
-}
-impl<A, F, O> Callable<(A,)> for F where F: Fn(A) -> O + 'static {
- type Output = O;
- fn curry_fn() -> fn(Self, (A,)) -> O { |self_, (a,)| (self_)(a) }
-}
-impl<A,B, F, O> Callable<(A,B)> for F where F: Fn(A,B) -> O + 'static {
- type Output = O;
- fn curry_fn() -> fn(Self, (A,B)) -> O { |self_, (a,b)| (self_)(a,b) }
-}
+async fn awaitpoint(_: ()) { }
-pub trait Object: Any + Send + Sync {}
-impl Object for String {}
-pub trait MI: Any {
- fn o_ti(&self) -> TypeId { TypeId::of::<Self>() }
- fn call(&self, o: Arc<dyn Any + Send + Sync>, u: ()) -> usize;
-}
+async fn failure() {
+ let (_, rx) = mpsc::channel::<()>();
-impl<O: Object, F> MI for fn((Arc<O>,())) -> usize {
- fn call(&self, o: Arc<dyn Any + Send + Sync>, u: ()) -> usize {
- (self)((Arc::downcast(o).unwrap(), u))
- }
-}
-impl<O: Object, F> MI for fn((Arc<O>,)) -> usize {
- fn call(&self, o: Arc<dyn Any + Send + Sync>, _u: ()) -> usize {
- (self)((Arc::downcast(o).unwrap(),))
+ while let Ok(event) = rx.recv() {
+ awaitpoint(event).await;
}
}
-fn example(o: Arc<String>) -> usize { o.len() }
-
-/*
-struct K<F>(F);
-
-const fn k<A, F: Callable<A>>(f: F) -> K<F> {
- f
-}
-
-&dyn MI {
- move |o| f(o)
- struct TE(&F);
- impl MI for TE {
- fn o_ti(&self) -> TypeId { TypeId::of::<O>() }
- fn call(&self, o: Arc<dyn Any + Send + Sync>) -> usize {
-
- }
- }
-
-}
- */
-/*
-struct Thunk<C>(C);
-
-impl<O, C> MI for Thunk<C>
-where C: Fn((O,)) -> usize
-{
- fn call(&self, o: Arc<dyn Any + Send + Sync>, u: ()) -> usize {
- (self)((Arc::downcast(o).unwrap(),))
- }
-}
-*/
fn main() {
- const CL: &dyn Any = {
- &(
- (&|t| Callable::curry_fn()(example, t))
- as fn(_) -> _
- )
- };
-//example.curry_fn();
-// let v: &dyn MI = k(example);
-
- println!("Hello, world!");
+ let _: Pin<Box<dyn Future<Output=()> + Send>> = Box::pin(
+ async {
+ failure().await;
+ }
+ );
}