Class: Rumonade::Either::RightProjection

Inherits:
Object
  • Object
show all
Includes:
Monad
Defined in:
lib/rumonade/either.rb

Overview

Projects an Either into a Right.

Constant Summary

Constants included from Monad

Monad::DEFAULT_METHODS_TO_REPLACE_WITH_MONAD

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Monad

#can_flatten_in_monad?, #each, #flat_map_with_monad, #flatten_with_monad, included, #map_with_monad, #shallow_flatten

Constructor Details

#initialize(either_value) ⇒ RightProjection

Returns a new instance of RightProjection.

Parameters:

  • either_value (Object)

    the Either value to project



256
257
258
# File 'lib/rumonade/either.rb', line 256

def initialize(either_value)
  @either_value = either_value
end

Instance Attribute Details

#either_valueObject (readonly)

Returns the Either value

Returns:

  • Returns the Either value



261
262
263
# File 'lib/rumonade/either.rb', line 261

def either_value
  @either_value
end

Class Method Details

.emptyRightProjection

Returns the empty RightProjection

Returns:



250
251
252
# File 'lib/rumonade/either.rb', line 250

def empty
  self.new(Left(nil))
end

.unit(value) ⇒ RightProjection

Returns a RightProjection of the Right of the given value

Returns:

  • (RightProjection)

    Returns a RightProjection of the Right of the given value



245
246
247
# File 'lib/rumonade/either.rb', line 245

def unit(value)
  self.new(Right(value))
end

Instance Method Details

#==(other) ⇒ Boolean

Returns true if other is a RightProjection with an equal Either value

Returns:

  • (Boolean)

    Returns true if other is a RightProjection with an equal Either value



264
265
266
# File 'lib/rumonade/either.rb', line 264

def ==(other)
  other.is_a?(RightProjection) && other.either_value == self.either_value
end

#all?(lam = nil, &blk) ⇒ Boolean

Returns true if Left or returns the result of the application of the given function to the Right value.

Returns:

  • (Boolean)

    Returns true if Left or returns the result of the application of the given function to the Right value.



286
287
288
# File 'lib/rumonade/either.rb', line 286

def all?(lam = nil, &blk)
  !either_value.right? || bind(lam || blk)
end

#any?(lam = nil, &blk) ⇒ Boolean

Returns false if Left or returns the result of the application of the given function to the Right value.

Returns:

  • (Boolean)

    Returns false if Left or returns the result of the application of the given function to the Right value.



276
277
278
# File 'lib/rumonade/either.rb', line 276

def any?(lam = nil, &blk)
  either_value.right? && bind(lam || blk)
end

#bind(lam = nil, &blk) ⇒ Object

Binds the given function across Right.



269
270
271
# File 'lib/rumonade/either.rb', line 269

def bind(lam = nil, &blk)
  if !either_value.right? then either_value else (lam || blk).call(either_value.right_value) end
end

#getObject

Returns the value from this Right or raises NoSuchElementException if this is a Left.



291
292
293
# File 'lib/rumonade/either.rb', line 291

def get
  if either_value.right? then either_value.right_value else raise NoSuchElementError end
end

#get_or_else(val_or_lam = nil, &blk) ⇒ Object

Returns the value from this Right or the given argument if this is a Left.



296
297
298
299
# File 'lib/rumonade/either.rb', line 296

def get_or_else(val_or_lam = nil, &blk)
  v_or_f = val_or_lam || blk
  if either_value.right? then either_value.right_value else (v_or_f.respond_to?(:call) ? v_or_f.call : v_or_f) end
end

#inspectString

Returns a String containing a human-readable representation of this object.

Returns:

  • (String)

    Returns a String containing a human-readable representation of this object.



317
318
319
# File 'lib/rumonade/either.rb', line 317

def inspect
  "RightProjection(#{either_value.inspect})"
end

#map(lam = nil, &blk) ⇒ Either

Returns Maps the function argument through Right.

Returns:

  • (Either)

    Maps the function argument through Right.



307
308
309
# File 'lib/rumonade/either.rb', line 307

def map(lam = nil, &blk)
  bind { |v| Right((lam || blk).call(v)) }
end

#select(lam = nil, &blk) ⇒ Option

Returns None if this is a Left or if the given predicate does not hold for the Right value, otherwise, returns a Some of Right.

Returns:

  • (Option)

    Returns None if this is a Left or if the given predicate does not hold for the Right value, otherwise, returns a Some of Right.



281
282
283
# File 'lib/rumonade/either.rb', line 281

def select(lam = nil, &blk)
  Some(self).select { |lp| lp.any?(lam || blk) }.map { |lp| lp.either_value }
end

#to_optOption

Returns a Some containing the Right value if it exists or a None if this is a Left.

Returns:

  • (Option)

    Returns a Some containing the Right value if it exists or a None if this is a Left.



302
303
304
# File 'lib/rumonade/either.rb', line 302

def to_opt
  Option(get_or_else(nil))
end

#to_sString

Returns a String representation of this object.

Returns:

  • (String)

    Returns a String representation of this object.



312
313
314
# File 'lib/rumonade/either.rb', line 312

def to_s
  "RightProjection(#{either_value})"
end