Skip to content

Instantly share code, notes, and snippets.

@chriseidhof
chriseidhof / AppDelegate.swift
Created December 13, 2015 15:05
Functional Swift Talk
import UIKit
struct Screen<A> {
let run: (A -> ()) -> UIViewController
}
struct Step<A> {
let build: (navigationController: UINavigationController, callback: A -> ()) -> UIViewController
}
@chriseidhof
chriseidhof / TypedExpr.swift
Last active February 3, 2018 23:01
Typed Expressions in Swift
// Variables just contain an integer. We can have a maximum of `Int.max` variables in our program. ¯\_(ツ)_/¯
private struct Var {
static var freshVarIx = 0
let ix: Int
init() {
Var.freshVarIx+=1
ix = Var.freshVarIx
}
}
@nicklockwood
nicklockwood / gist:493da04de6ea5cbc7a7e
Last active December 28, 2016 16:02
Animating layer contents when bounds changes
@interface AnimatedContentsLayer: CALayer
@property (nonatomic, assign) CGSize animatedSize;
@end
@implementation AnimatedContentsLayer
@dynamic animatedSize;
import Cocoa
import MASShortcut
func pow() {
let rect = NSScreen.mainScreen()?.frame
let window = NSWindow(contentRect: rect!, styleMask: NSBorderlessWindowMask, backing: .Buffered, `defer`: false)
window.backgroundColor = NSColor.clearColor()
window.opaque = false
window.alphaValue = 1
window.makeKeyAndOrderFront(NSApplication.sharedApplication())
@import UIKit;
NS_ASSUME_NONNULL_BEGIN
@protocol MFBPreviewableCollectionView
- (nullable NSIndexPath *)mfb_previewableCollectionIndexPathForItemAtPoint:(CGPoint)point;
- (CGRect)mfb_previewableCollectionItemRectForIndexPath:(NSIndexPath *)indexPath;
//
// AppDelegateHandler.swift
// Pods
//
// Created by Andrey Zarembo on 10.02.16.
//
//
import Foundation
// @discardableResult to be added
// @noescape needs to move to type annotation
// needs to add _ for item
public func with<T>(item: T, @noescape update: (inout T) throws -> Void) rethrows -> T {
var this = item; try update(&this); return this
}
@PaulTaykalo
PaulTaykalo / binding.swift
Created July 25, 2016 16:31
Example selector/method binding
public func <~ <Destination, Source: SignalProducerType where Source.Value == Destination>(destinationSelector: (Destination) -> (), sourceProducer: Source) -> Disposable {
return sourceProducer.startWithNext(destinationSelector)
}
// Without binding...
viewModel.deliveryTime.producer
.map { ($0, UIControlState.Normal) }
.takeUntil(rac_willDeallocSignalProducer())
.startWithNext(deliveryTimeButton.setTitle)
@andymatuschak
andymatuschak / States-v3.md
Last active December 25, 2025 23:27
A composable pattern for pure state machines with effects (draft v3)

A composable pattern for pure state machines with effects

State machines are everywhere in interactive systems, but they're rarely defined clearly and explicitly. Given some big blob of code including implicit state machines, which transitions are possible and under what conditions? What effects take place on what transitions?

There are existing design patterns for state machines, but all the patterns I've seen complect side effects with the structure of the state machine itself. Instances of these patterns are difficult to test without mocking, and they end up with more dependencies. Worse, the classic patterns compose poorly: hierarchical state machines are typically not straightforward extensions. The functional programming world has solutions, but they don't transpose neatly enough to be broadly usable in mainstream languages.

Here I present a composable pattern for pure state machiness with effects,

@imax
imax / cheatsheet.markdown
Last active July 25, 2022 11:36
Relocation cheatsheet

Compare cost of living in different locations around the world.

Country (city) Salary (gross) Taxes Apartment Visa More info
Germany (Berlin) €50-60k 27-33% €700-1200/mo Blue Card, 1-3 months, spouse can work de_faq на русском Numbeo
Estonia (Tallinn) €35-45k 41.5% €600-1200/mo 2 months, spouse can work Taxes
xxx

Legend: