     case .Nil:
       return .None
     case let .Cons(head, _):
-      return head
+      return head()
     }
   }
 

  }
}

public func ==<A : Equatable>(lhs : List<A>, rhs : List<A>) -> Bool {
  switch (lhs, rhs) {
  case (.Nil, .Nil):
    return true
  case let (.Cons(lHead, lTail), .Cons(rHead, rTail)):
    return lHead == rHead && lTail.value == rTail.value
  default:
    return false
  }
}

extension List : ArrayLiteralConvertible {
  typealias Element = A

  public init(arrayLiteral s: Element...) {
    var xs : [A] = []
    var g = s.generate()

    case .Nil:
      return List()
    case let .Cons(head, tail):
      return List(f(head()), ListF(l: tail.value).fmap(f))
    }
  }
}
