typelift / Swiftx

Functional data types and functions for any project
BSD 3-Clause "New" or "Revised" License
219 stars 28 forks source link

Swiftx

Swiftx is a Swift library containing functional abstractions and extensions to the Swift Standard Library. Swiftx is a smaller and simpler way to introduce pure functional datatypes into any codebase.

For a more full-featured library checkout Swiftz.

Setup

Swiftx can be included one of two ways:

Framework

Standalone

Introduction

Swiftx provides a number of common data types and abstractions any codebase can utilize.

A small example:

import Swiftx

let str : String? = .Some("Hello ")
let greeting = (+"World") <^> str // .Some("Hello World")

Seamless interaction with existing platform libraries is also possible with minimal effort:

import Foundation
import struct Swiftx.Result

/// result now contains either an array of file paths or the error generated by `NSFileManager`.
let result : Result<[String]> = from({ ep in
    let documentsDirectory : String = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String)
    return (NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentsDirectory, error: ep) as [String]?) ?? []
})

Swiftx can even help with expressions of nothingness or errors:

import Swiftx

/// We may not be able to do what we said we'd do, but this definition compiles. At runtime, 
/// any code that invokes this function will immediately halt the program.
func provePEqualsNP() -> Proof<P, NP> {
    return undefined()
}

System Requirements

Swiftx supports OS X 10.9+ and iOS 8.0+.

License

Swiftx is released under the BSD license.