https://github.com/google/codeworld
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04
#include <stdlib.h> | |
#include <stdio.h> | |
// return :: Monad m => a -> m a | |
typedef void * /* m a */ return_t(void * /* a */); | |
// type kleisli_arrow a b = a -> m b | |
typedef void * /* m b */ kleisli_arrow(void * /* a */); | |
// bind :: Monad m => m a -> (a -> m b) -> m b |
// We create a global char for each type | |
// But we actually care about its address to be used as a constexpr token | |
template <class T> char token; | |
using type_token = const void *; | |
// A utility to get a list of tokens for a list of types | |
template <class ... Elems> constexpr type_token tokens[sizeof...(Elems)] = {&token<Elems>...}; | |
// A utility template to pass around a list of types as a value | |
template <class ... T> struct list{}; |
#include <string> | |
#include <stdio.h> | |
template<class Func> | |
struct overload_base { | |
Func f; | |
template <class ... T> | |
friend decltype(f(std::declval<T>()...)) call(overload_base * b, T ... in) { | |
return b->f(in...); | |
} |
#include <functional> | |
#include <list> | |
#include <boost/any.hpp> | |
using boost::any; | |
using std::list; | |
// list_cast :: list<any> -> list<T> | |
template<class T> |