public func >>-<A, B>(a: A?, f: A -> B?) -> B? {
  switch a {
  case let .Some(x): return f(x)
  default: return .None
  }
}

public func <^><A, B>(f: A -> B, a: A?) -> B? {
  switch a {
  case let .Some(x): return f(x)
  default: return .None
  }
}

public func <*><A, B>(f: (A -> B)?, a: A?) -> B? {
  switch f {
  case let .Some(fx): return fx <^> a
  default: return .None
  }
}

public func >>-<A, B>(a: A?, f: A -> B?) -> B? {
  if let x = a {
    return f(x)
  } else {
    return .None
  }
}

public func <^><A, B>(f: A -> B, a: A?) -> B? {
  if let x = a {
    return f(x)
  } else {
    return .None
  }
}

public func <*><A, B>(f: (A -> B)?, a: A?) -> B? {
  if let fx = f {
    return fx <^> a
  }
  return .None
}

--- 
+++ 
@@ -1,22 +1,20 @@
 public func >>-<A, B>(a: A?, f: A -> B?) -> B? {
-  if let x = a {
-    return f(x)
-  } else {
-    return .None
+  switch a {
+  case let .Some(x): return f(x)
+  default: return .None
   }
 }
 
 public func <^><A, B>(f: A -> B, a: A?) -> B? {
-  if let x = a {
-    return f(x)
-  } else {
-    return .None
+  switch a {
+  case let .Some(x): return f(x)
+  default: return .None
   }
 }
 
 public func <*><A, B>(f: (A -> B)?, a: A?) -> B? {
-  if let fx = f {
-    return fx <^> a
+  switch f {
+  case let .Some(fx): return fx <^> a
+  default: return .None
   }
-  return .None
 }
Use switch statements for functional operators

This is safer than using an `if` statement. And it looks better.
