// // Operations.swift // Cyberlock // // Created by Jura on 8/14/19. // Copyright © 2019 Omicronmedia. All rights reserved. // import Foundation precedencegroup MonadicPrecedence { associativity: left higherThan: BitwiseShiftPrecedence } infix operator >>- : MonadicPrecedence @inline(__always) @discardableResult public func >>-(a: T?, f: (T) throws -> U?) rethrows -> U? { switch a { case .some(let x): return try f(x) case .none: return nil } } // MARK: <<< / >>> precedencegroup FunctionApplicationPrecedenceLeft { lowerThan: AssignmentPrecedence associativity: left } infix operator >>> : FunctionApplicationPrecedenceLeft @inline(__always) public func >>>(x: T, f: (T) throws -> U) rethrows -> U { return try f(x) } precedencegroup FunctionApplicationPrecedenceRight { lowerThan: AssignmentPrecedence associativity: right } infix operator <<< : FunctionApplicationPrecedenceRight @inline(__always) public func <<<(f: (T) throws -> U, x: T) rethrows -> U { return try f(x) }