     }
 }
 
-@available(*, unavailable, message: "Custom reducers are no longer supported")
+@available(*, unavailable, message: "Custom reducers are no longer supported. See the \"Migrating From GRDB 4 to GRDB 5\" guide.")
 typealias ValueReducer = _ValueReducer
 
 @available(*, unavailable, message: "ValueObservation now schedules its values asynchronously on the main queue by default. See ValueObservation.start() for possible configuration")

        set { preconditionFailure() }
    }
    
    @available(*, unavailable, message: "Custom reducers are no longer supported")
    public static func tracking(_ regions: DatabaseRegionConvertible..., reducer: @escaping (Database) throws -> Reducer) -> ValueObservation
    { preconditionFailure() }

    @available(*, unavailable, message: "Custom reducers are no longer supported")
    public static func tracking(_ regions: [DatabaseRegionConvertible], reducer: @escaping (Database) throws -> Reducer) -> ValueObservation
    { preconditionFailure() }
    
    @available(*, unavailable, message: "compactMap is no longer available")
    public func compactMap<T>(_ transform: @escaping (Reducer.Value) -> T?) -> ValueObservation<ValueReducers.Unavailable<T>>
    { preconditionFailure() }
    

    { preconditionFailure() }
}

@available(*, unavailable, message: "Custom reducers are no longer supported. See the \"Migrating From GRDB 4 to GRDB 5\" guide.")
public struct AnyValueReducer<Fetched, Value>: _ValueReducer {
    public var isObservedRegionDeterministic: Bool
    { preconditionFailure() }
