chiark / gitweb /
found before delete
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 5 Jun 2023 15:46:48 +0000 (16:46 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 5 Jun 2023 15:46:51 +0000 (16:46 +0100)
src/main.rs

index 966cf04365ccc46db1b05c244349290c15d7a55c..4b49bee39a2841aac4edb584203e91a6f4fda2f1 100644 (file)
@@ -1,78 +1,21 @@
-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;
+        }
+    );
 }