Skip to content

Instantly share code, notes, and snippets.

View elbeno's full-sized avatar

Ben Deane elbeno

View GitHub Profile
@elbeno
elbeno / visit_at.cpp
Created May 16, 2015 23:22
Runtime visitation of a tuple in C++
#include <algorithm>
#include <cassert>
#include <tuple>
#include <utility>
namespace detail
{
template <size_t N>
struct visit_impl
{
@elbeno
elbeno / fibonacci.cpp
Last active May 19, 2020 03:55
O(log n) fibonacci numbers
#include <utility>
// The 2x2 fibonacci matrix
//
// { F(n+1) F(n) }
// { F(n) F(n-1) }
//
// can be represented as just the bottom row, since the top row can be computed:
// so just use a pair.
template <typename N>
@elbeno
elbeno / fix.cpp
Created May 16, 2015 21:58
Fixed-point (Y) combinator in C++
#include <functional>
#include <iostream>
using namespace std;
template <typename F>
struct Y
{
Y(F f) : m_f(f) {}
template <typename T>
@elbeno
elbeno / keyed.cpp
Last active June 10, 2018 23:33
Keyed functions in C++
#include <memory>
#include <type_traits>
// Foo is a class that has a private constructor, and it's created by a factory
// function that returns a smart pointer.
class Foo
{
public:
static std::unique_ptr<Foo> Create();
@elbeno
elbeno / main.hs
Last active August 29, 2015 14:20
Writer monad idea, with foldable things instead of monoids
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
module Main where
-- Here's the familiar Writer monad. For the purposes here, we're not worried
-- about the instances for functor, monad etc.
newtype Writer a x = Writer { runWriter :: (x, a) }