Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. enum Space<T> {
  2. case contains(val:T)
  3. case empty
  4.  
  5. //A mapping from Domain of type T to Codomain of type T
  6. func function(f:(T) -> T) -> Space{
  7. switch self {
  8. case .contains(let x):
  9. return .contains(val: f(x))
  10. case .empty:
  11. return .empty
  12. }
  13. }
  14.  
  15. //A mapping from Domain of type T to Codomain of type U
  16. func functor<U>(f:(T) -> U) -> Space<U> {
  17. switch self {
  18. case .contains(let x):
  19. return .contains(val: f(x))
  20. case .empty:
  21. return .empty
  22. }
  23. }
  24. }
  25.  
  26. //Example of our functor function
  27. func readMe(_ num:CNumber) -> String{
  28. switch num {
  29. case CNumber(a: 0.0, b: 0.0):
  30. return "Nothing"
  31. case CNumber(a: 0.0, b: 1.0):
  32. return "i"
  33. default:
  34. return "Not a CNumber"
  35. }
  36. }
  37.  
  38.  
  39. let z1 = Space.contains(val: 1.0.i)
  40. let z2 = z1.functor(f: readMe)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement