Several constraints for a type

Hello!

We are expanding our usage of dry-types (as well as the rest of the ecosystem) and I have a question on how to enforce a specific type.
Basically I want to check that the given type is an ActiveRecord model that was persisted?.

I tried this:

Model = Types::Instance(ApplicationRecord)

Persisted = Types::Any.constructor do |input|
  unless input.respond_to?(:persisted?) && input.persisted?
    raise Dry::Types::ConstraintError.new(:persisted?, input) 
  end

  input
end

PersistedModel = Model >> Persisted

I think that a union type would be the best solution for both constraints (saw some conversation here).

I also tried to play around with some custom predicates due to this comment without much luck mostly.

I don’t know how correct is the use of Function for this kind of scenario. I couldn’t find any documentation so sorry if it’s somewhere.