Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum Space<T> {
- case contains(val:T)
- case empty
- //A mapping from Domain of type T to Codomain of type T
- func function(f:(T) -> T) -> Space{
- switch self {
- case .contains(let x):
- return .contains(val: f(x))
- case .empty:
- return .empty
- }
- }
- //A mapping from Domain of type T to Codomain of type U
- func functor<U>(f:(T) -> U) -> Space<U> {
- switch self {
- case .contains(let x):
- return .contains(val: f(x))
- case .empty:
- return .empty
- }
- }
- }
- //Example of our functor function
- func readMe(_ num:CNumber) -> String{
- switch num {
- case CNumber(a: 0.0, b: 0.0):
- return "Nothing"
- case CNumber(a: 0.0, b: 1.0):
- return "i"
- default:
- return "Not a CNumber"
- }
- }
- let z1 = Space.contains(val: 1.0.i)
- let z2 = z1.functor(f: readMe)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement