Sha256: 55c6fdcb73fc991c29a8e8f34d3f7af1a999b9b59b0649f11e361776ce015333
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
require_relative 'lambda_block' module Eithers private def left(value) Either.left(value) end def right(value) Either.right(value) end end class Either include Comparable include LambdaBlock def self.left(value) Left.new(value) end def self.right(value) Right.new(value) end end class Left < Either def initialize(value) @value = value end def is_left? true end def is_right? false end def left_value @value end def right_value raise NoSuchElementException.new end def map_lr(fn_left, fn_right) fn_left.(@value) end def map_left(fn=nil, &block) assert_funcs(fn, block_given?) left(block_given? ? block.call(@value) : fn.(@value)) end def <=>(other) @value <=> other.left_value end end class Right < Either def initialize(value) @value = value end def is_left? false end def is_right? true end def left_value raise NoSuchElementException.new end def right_value @value end def map(fn=nil, &block) assert_funcs(fn, block_given?) right(block_given? ? block.call(@value) : fn.(@value)) end def map_lr(fn_left, fn_right) fn_right.(@value) end def map_left(fn=nil, &block) assert_funcs(fn, block_given?) self end def <=>(other) @value <=> other.right_value end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
totally_lazy-0.1.28 | lib/totally_lazy/either.rb |