Guest User

Untitled

a guest
Jan 19th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. fn c<T>(s: String) -> Box<Fn(Box<Fn(String) -> T>) -> T> {
  2. Box::new(move |k: Box<Fn(String) -> T>| k(s.clone()))
  3. }
  4.  
  5. fn d<T>(k: &'static Fn(String) -> T) -> Box<Fn(i32) -> T> {
  6. Box::new(move |i: i32| k(i.to_string()))
  7. }
  8.  
  9. fn s<T>(k: &'static Fn(String) -> T) -> Box<Fn(String) -> T> {
  10. Box::new(move |st: String| k(st))
  11. }
  12.  
  13. fn sprintf<T>(f: &Fn(&Fn(String) -> String) -> T) -> T {
  14. f(&|x| format!("integer: {}", x))
  15. }
  16.  
  17. fn append<T, U, V>(
  18. f: &Fn(&Fn(String) -> T) -> V,
  19. g: &Fn(&Fn(String) -> U) -> T,
  20. h: &Fn(String) -> U,
  21. ) -> V {
  22. f(&(move |s1: String| {
  23. g(&(move |s2: String| {
  24. let v = vec![s1.clone(), s2.clone()];
  25. let v = <[String]>::concat(&v);
  26. h(v)
  27. }))
  28. }))
  29. }
  30.  
  31. fn main() {
  32. //let result: &Fn(i32) -> String = sprintf(append(&d, &c, &String::from("foo")));
  33. // println!("--> {}", result(10));
  34. }
Add Comment
Please, Sign In to add comment