Skip to content

Instantly share code, notes, and snippets.

@cqfd
cqfd / index.js
Last active January 28, 2017 23:58
Mini webpack-driven testing library.
const { runTest } = require('./t')
let testCache = {}
const ctxId = runDirtyTests()
module.hot.accept(ctxId, runDirtyTests)
module.hot.accept()
module.hot.dispose(() => { testCache = {} })
@cqfd
cqfd / transition.jsx
Last active January 12, 2017 22:42
Using Flow to check state transitions
// @flow
import React, { Component } from 'react'
type State = { s: StartState | EndState }
type StartState = { stage: 'start' }
type EndState = { stage: 'end' }
// c.f. http://stackoverflow.com/questions/41604525/do-flow-refinements-not-propagate-up
export default class App extends React.Component {
@cqfd
cqfd / AdminOnly.jsx
Last active January 11, 2017 03:41
Admin-only React components with Flow
// @flow
import React from 'react'
import type { AdminProof } from './User'
export default function AdminOnly(props: { proof: AdminProof }) {
return <p>Secret admin stuff!</p>
}
@cqfd
cqfd / Parser.hs
Last active September 17, 2016 00:23
Attoparsec + Zlib decompression example.
import Control.Monad.Except (ExceptT, runExceptT)
import Control.Monad.State.Class (get, put)
import Control.Monad.State.Strict (StateT, evalStateT)
import Data.Attoparsec.ByteString
import qualified Data.Attoparsec.ByteString as A
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.Monoid ((<>))
import qualified Data.Streaming.Zlib as Z
@cqfd
cqfd / Quick.scala
Last active September 7, 2016 21:26
object Quick {
def sort(xs: Array[Int]): Unit = {
def go(start: Int, end: Int): Unit = {
if (end - start > 1) {
val i = partition(start, end)
go(start, i)
go(i + 1, end)
}
}
@cqfd
cqfd / Quick.scala
Last active August 19, 2016 22:30
Example of using loop invariants plus assert, ensure, require in Scala.
object Quick {
def sort(xs: Array[Int]): Unit = {
def go(lo: Int, hi: Int): Unit = {
if (lo < hi) {
val p = partition(xs, lo, hi)
go(lo, p - 1)
go(p + 1, hi)
}
}
import RxSwift
import RxSwiftExt
class Signal<E>: ObservableConvertibleType {
private let _out: Variable<E>
var value: E { return _out.value }
init(out: Variable<E>) {
_out = out
}
func map<R>(selector: E -> R) -> Signal<R> {
@cqfd
cqfd / SimpleSignal.swift
Created June 26, 2016 22:07
Broken signal implementation...
class SimpleSignal<E> {
private let _v: Variable<E>
var value: E { return _v.value }
private let _disposeBag = DisposeBag()
init(initialValue: E, subsequentValues: Observable<E>) {
_v = Variable(initialValue)
subsequentValues.bindTo(self._v).addDisposableTo(_disposeBag)
}
import RxSwift
import RxSwiftExt
class Signal<Element>: ObservableConvertibleType, DriverConvertibleType {
typealias E = Element
private let _v: Variable<E>
var value: E { return _v.value }
init(initialValue: E, subsequentValues: Observable<E>) {
@cqfd
cqfd / Variable+Helpers.swift
Created June 25, 2016 18:04
Some extensions for RxSwift Variables, motivated by applicatives.
extension Variable {
func debug() -> Self {
_ = self.asObservable().debug().subscribeNext { _ in }
return self
}
static func combineLatest<A, B>(a: Variable<A>, _ b: Variable<B>, resultSelector: (A, B) -> E) -> Variable<E> {
let v = Variable(resultSelector(a.value, b.value))
_ = Observable.combineLatest(a.asObservable().skip(1), b.asObservable().skip(1), resultSelector: resultSelector).subscribeNext { e in
v.value = e