Sha256: bf9727ba96f2ac9a1b54789366222c8242df88fc5ff677bf0481e96f7b11cb98
Contents?: true
Size: 820 Bytes
Versions: 2
Compression:
Stored size: 820 Bytes
Contents
require_relative 'blank' class Proc def self.comp(f, g) lambda { |*args| f[g[*args]] } end def *(g) Proc.comp(self, g) end end module Kleisli class ComposedFn < Blank include ::Kernel def initialize(fns=[]) @fns = fns end def fn(*args, &block) f = -> arguments, receiver { block.call(receiver, *arguments) }.curry[args] ComposedFn.new(@fns + [f]) end def method_missing(meth, *args, &block) f = -> arguments, receiver { receiver.send(meth, *arguments, &block) }.curry[args] ComposedFn.new(@fns + [f]) end def call(*args) if @fns.any? @fns.reduce(:*).call(*args) else args.first end end def to_ary @fns.to_ary end end end F = Kleisli::ComposedFn.new
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kleisli-0.2.0 | lib/kleisli/composition.rb |
kleisli-0.1.0 | lib/kleisli/composition.rb |