         if ABGroupAddMember(storage, member.storage, &error) {
             return .None
         }
-        return AddressBook.Error(error: error)
+        return AddressBook.Error.AddGroupMember(NSError.from(error))
     }
 
     public func remove<P: AddressBook_PersonType where P.Storage == PersonStorage>(member: P) -> ErrorType? {

    public typealias GroupStorage = ABRecordRef
    public typealias SourceStorage = ABRecordRef

    enum Error: ErrorType {
        case UnderlyingError(NSError)
        case UnknownError

        init(error: Unmanaged<CFErrorRef>?) {
            if let error = error {
                self = .UnderlyingError(unsafeBitCast(error.takeUnretainedValue(), NSError.self))
            }
            else {
                self = .UnknownError
            }
        }
    }


    return LabeledValue.write(value)
}

extension NSError {

    static func from(ref: Unmanaged<CFErrorRef>?) -> NSError? {
        return ref.map { unsafeBitCast($0.takeUnretainedValue(), NSError.self) }
    }
}



