Module: Dry::Monads::RightBiased::Right
- Includes:
- Core::Constants
- Included in:
- Maybe::Some, Dry::Monads::Result::Success, Try::Value
- Defined in:
- lib/dry/monads/right_biased.rb
Overview
Right part
Class Method Summary collapse
Instance Method Summary collapse
- #===(other) ⇒ Boolean
-
#and(mb) ⇒ RightBiased::Left, RightBiased::Right
Combines the wrapped value with another monadic value.
-
#apply(val = Undefined) ⇒ RightBiased::Left, RightBiased::Right
Applies the stored value to the given argument if the argument has type of Right, otherwise returns the argument.
-
#bind(*args, **kwargs) ⇒ Object
Calls the passed in Proc object with value stored in self and returns the result.
-
#deconstruct ⇒ Object
private
Pattern matching.
-
#discard ⇒ RightBiased::Right
Maps the value to Dry::Monads::Unit, useful when you don't care about the actual value.
-
#flatten ⇒ RightBiased::Right, RightBiased::Left
Removes one level of monad structure by joining two values.
-
#fmap ⇒ RightBiased::Right
Abstract method for lifting a block over the monad type.
-
#or ⇒ RightBiased::Right
Ignores arguments and returns self.
-
#or_fmap ⇒ RightBiased::Right
A lifted version of
#or
. -
#tee(*args, &block) ⇒ RightBiased::Right
Does the same thing as #bind except it returns the original monad when the result is a Right.
-
#value! ⇒ Object
Unwraps the underlying value.
-
#value_or(_val = nil) ⇒ Object
Returns value.
Class Method Details
.included(m) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/dry/monads/right_biased.rb', line 18 def self.included(m) super def m.to_proc @to_proc ||= method(:new).to_proc end m.singleton_class.send(:alias_method, :call, :new) end |
Instance Method Details
#===(other) ⇒ Boolean
132 133 134 |
# File 'lib/dry/monads/right_biased.rb', line 132 def ===(other) self.class == other.class && value! === other.value! end |
#and(mb) ⇒ RightBiased::Left, RightBiased::Right
Combines the wrapped value with another monadic value. If both values are right-sided, yields a block and passes a tuple of values there. If no block given, returns a tuple of values wrapped with a monadic structure.
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/dry/monads/right_biased.rb', line 177 def and(mb) bind do |a| mb.fmap do |b| if block_given? yield([a, b]) else [a, b] end end end end |
#apply(val = Undefined) ⇒ RightBiased::Left, RightBiased::Right
Applies the stored value to the given argument if the argument has type of Right, otherwise returns the argument.
122 123 124 125 126 127 128 |
# File 'lib/dry/monads/right_biased.rb', line 122 def apply(val = Undefined) unless @value.respond_to?(:call) raise TypeError, "Cannot apply #{ val.inspect } to #{ @value.inspect }" end Undefined.default(val) { yield }.fmap { |unwrapped| curry.(unwrapped) } end |
#bind(*args, **kwargs) ⇒ Object
Calls the passed in Proc object with value stored in self and returns the result.
If proc is nil, it expects a block to be given and will yield to it.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/dry/monads/right_biased.rb', line 48 def bind(*args, **kwargs) if args.empty? && !kwargs.empty? vargs, vkwargs = destructure(@value) kw = [kwargs.merge(vkwargs)] else vargs = [@value] kw = kwargs.empty? ? EMPTY_ARRAY : [kwargs] end if block_given? yield(*vargs, *args, *kw) else obj, *rest = args obj.(*vargs, *rest, *kw) end end |
#deconstruct ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Pattern matching
198 199 200 201 202 203 204 205 206 |
# File 'lib/dry/monads/right_biased.rb', line 198 def deconstruct if Unit.equal?(@value) [] elsif @value.is_a?(::Array) @value else [@value] end end |
#discard ⇒ RightBiased::Right
Maps the value to Dry::Monads::Unit, useful when you don't care about the actual value.
144 145 146 |
# File 'lib/dry/monads/right_biased.rb', line 144 def discard fmap { Unit } end |
#flatten ⇒ RightBiased::Right, RightBiased::Left
Removes one level of monad structure by joining two values.
157 158 159 |
# File 'lib/dry/monads/right_biased.rb', line 157 def flatten bind(&:itself) end |
#fmap ⇒ RightBiased::Right
Abstract method for lifting a block over the monad type. Must be implemented for a right-biased monad.
82 83 84 |
# File 'lib/dry/monads/right_biased.rb', line 82 def fmap(*) raise NotImplementedError end |
#or ⇒ RightBiased::Right
Ignores arguments and returns self. It exists to keep the interface identical to that of Left.
90 91 92 |
# File 'lib/dry/monads/right_biased.rb', line 90 def or(*) self end |
#or_fmap ⇒ RightBiased::Right
A lifted version of #or
. For Dry::Monads::RightBiased::Right acts in the same way as #or
,
that is returns itselt.
98 99 100 |
# File 'lib/dry/monads/right_biased.rb', line 98 def or_fmap(*) self end |
#tee(*args, &block) ⇒ RightBiased::Right
Does the same thing as #bind except it returns the original monad when the result is a Right.
74 75 76 |
# File 'lib/dry/monads/right_biased.rb', line 74 def tee(*args, &block) bind(*args, &block).bind { self } end |
#value! ⇒ Object
Unwraps the underlying value
30 31 32 |
# File 'lib/dry/monads/right_biased.rb', line 30 def value! @value end |
#value_or(_val = nil) ⇒ Object
Returns value. It exists to keep the interface identical to that of RightBiased::Left
105 106 107 |
# File 'lib/dry/monads/right_biased.rb', line 105 def value_or(_val = nil) @value end |