Skip to content

Instantly share code, notes, and snippets.

View truizlop's full-sized avatar
🏹
FP'ing with Bow

Tomás Ruiz-López truizlop

🏹
FP'ing with Bow
View GitHub Profile
@truizlop
truizlop / CircleWave.swift
Created September 29, 2020 15:43
Circle wave animation
import SwiftUI
struct CircleWave: Shape {
let N = 360
let SPEED: Double = 1 / 1000.0
let SHIFT: Double = 2 * Double.pi / 3
let FREQUENCY: Double = 8
var factor: Double
var colorIndex: Double
@truizlop
truizlop / Wave.swift
Created September 10, 2020 14:41
Wave animation using SwiftUI
import SwiftUI
let LINE_LENGTH: Double = 500.0
let N = 720
let LINES = 18
let WAVES: Double = 18.0
let WAVE_HEIGHT: Double = 20
let SPACING: Double = 27.0
let CURL_AMOUNT: Double = 12.0
pandoc --from=markdown --output=my.pdf my.md                                   \
       --variable=geometry:"margin=0.5cm, paperheight=421pt, paperwidth=595pt" \
       --highlight-style=espresso
@truizlop
truizlop / Testable effects.swift
Created July 5, 2019 13:48
Testing effectful services with BowEffects (not released yet)
import Bow
import BowEffects
typealias UserID = String
struct UserProfile: Equatable {
let name: String
}
protocol Database {
var database: DatabaseService { get }
@truizlop
truizlop / FormValidator.swift
Created April 1, 2019 11:18
Validation with Bow 0.4.0
import Bow
import Foundation
typealias FormValidationResult<T> = ValidatedNEA<FormError, T>
struct Form: Equatable {
let firstName: String
let lastName: String
let birthday: Date
let documentId: String
func generateSequenceOf(lengthSmallerThan n : Int) -> Gen<ArrayOf<Player>> {
return ArrayOf<Player>.arbitrary.suchThat{ $0.getArray.count < n }
}
extension PointData : Arbitrary {
public static var arbitrary : Gen<PointData> {
return Gen<(Point, Point)>.zip(Point.arbitrary, Point.arbitrary).map(PointData.init)
}
}
extension Player : Arbitrary {
public static var arbitrary : Gen<Player> {
return Gen<Player>.fromElementsOf([Player.one, Player.two])
}
}
let uppercaseCharacterGen = Gen<Character>.fromElementsIn(Character("A")...Character("Z"))
let positiveIntsGen = Int.arbitrary.suchThat{ n in n > 0 }