     self.initiatedFetch = true
     props.source(nil, state?.last?.after, { (status) in
       switch status {
-      case .ok(let batch):
-        var newState = state ?? []
+      case .success(let batch):
+        var newState = self.state ?? []
         newState.append(batch)
-        updateState(state: newState)
+        self.updateState(state: newState)
         break
       case .error(let e):
         print("Error loading initial list data:\(e)")

    self.initiatedFetch = true
    props.source(nil, nil, { (status) in
      switch status {
      case .ok(let batch):
        updateState(state: [batch])
        break
      case .error(let e):
        print("Error loading initial list data:\(e)")

  let before: AnyHashable
  let after: AnyHashable
  let items: [ItemType]

  public init(before: AnyHashable, after: AnyHashable, items: [ItemType]) {
    self.before = before
    self.after = after
    self.items = items
  }
}

public struct ListFetchError: Error {
  let string: String
  public init(string: String) {
    self.string = string
  }
}

public enum ListFetchStatus<ItemType> {
  case success(batch: ListBatch<ItemType>)
  case error(e: Error)
}

public typealias ListItemSource<ItemType> = (
  _ before: AnyHashable?,
  _ after: AnyHashable?,
  _ handler: @escaping (ListFetchStatus<ItemType>) -> ()
) -> ()

public final class ListComponent<ItemType>: Component, TypedComponent {
