Sha256: 96f2b24239f31853d8f48b3f93d02a9cecd726cc1f4c8138477570df27990d99

Contents?: true

Size: 635 Bytes

Versions: 1

Compression:

Stored size: 635 Bytes

Contents

module Functional

  def identity
    ->x{ x}
  end


  module ClassMethods

    def compose(*proc_chain)
      proc_chain = proc_chain.first if proc_chain.first.class == Array
      proc_chain.reduce(->(x){x}){|result,p| result.compose(p)}
    end
  end




  def complement
  lambda {|*args| not self.call(*args) }
  end

 def compose(other)
    lambda {|*args| call(other.call(*args)) }
  end

  def pipe(other)
    other.compose(self)
  end


  alias :* :compose
  alias :>> :pipe





end

class Proc; include Functional; extend Functional::ClassMethods; end
class Method; include Functional; extend Functional::ClassMethods; end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reducers-0.0.5 lib/reducers/functional.rb