module BCDD::Contract
  module Unit
    class Checking
      include Core::Checking

      def initialize: (::Proc, untyped) -> void

      def errors_message: () -> ::String
    end

    module Checker
      include Core::Checker

      SequenceMapper: ::Proc

      def & : (untyped) -> ::Module

      ParallelMapper: ::Proc

      def | : (untyped) -> ::Module

      private

      def compose: (untyped, Proc) -> ::Module
    end

    module Factory
      def self.new: (untyped) -> untyped
      def self.build: (untyped) -> untyped

      ArityOneHandler: ::Proc

      def self.lambda!: (untyped) -> untyped
      def self.type!: (untyped) -> untyped
    end

    def self.new: (untyped) -> ::Module
  end
end