lib/dry/monads.rb in dry-monads-1.0.0.beta1 vs lib/dry/monads.rb in dry-monads-1.0.0.beta2

- old
+ new

@@ -1,87 +1,14 @@ -require 'dry/core/constants' -require 'dry/monads/maybe' -require 'dry/monads/try' -require 'dry/monads/list' -require 'dry/monads/task' -require 'dry/monads/lazy' -require 'dry/monads/result' -require 'dry/monads/result/fixed' -require 'dry/monads/do' -require 'dry/monads/validated' - module Dry # Common, idiomatic monads for Ruby # # @api public module Monads - # @private - Undefined = Dry::Core::Constants::Undefined - - # List of monad constructors - CONSTRUCTORS = [ - Maybe::Mixin::Constructors, - Result::Mixin::Constructors, - Validated::Mixin::Constructors, - Try::Mixin::Constructors, - Task::Mixin::Constructors, - Lazy::Mixin::Constructors - ].freeze - - # @see Maybe::Some - Some = Maybe::Some - # @see Maybe::None - None = Maybe::None - # @see Result::Success - Success = Result::Success - # @see Result::Failure - Failure = Result::Failure - # @see Validated::Valid - Valid = Validated::Valid - # @see Validated::Invalid - Invalid = Validated::Invalid - - extend(*CONSTRUCTORS) - - # @private def self.included(base) - super - - base.include(*CONSTRUCTORS) - end - - # Creates a module that has two methods: `Success` and `Failure`. - # `Success` is identical to {Result::Mixin::Constructors#Success} and Failure - # rejects values that don't conform the value of the `error` - # parameter. This is essentially a Result type with the `Failure` part - # fixed. - # - # @example using dry-types - # module Types - # include Dry::Types.module - # end - # - # class Operation - # # :user_not_found and :account_not_found are the only - # # values allowed as failure results - # Error = - # Types.Value(:user_not_found) | - # Types.Value(:account_not_found) - # - # def find_account(id) - # account = acount_repo.find(id) - # - # account ? Success(account) : Failure(:account_not_found) - # end - # - # def find_user(id) - # # ... - # end - # end - # - # @param error [#===] the type of allowed failures - # @return [Module] - def self.Result(error, **options) - Result::Fixed[error, **options] + if const_defined?(:CONSTRUCTORS) + base.include(*CONSTRUCTORS) + else + raise "Load all monads first with require 'dry/monads/all'" + end end end end