Sha256: d8254265427667b7eaa161c399779037e31d2b900d48bf0ac22c8bb8371d13f8
Contents?: true
Size: 618 Bytes
Versions: 1
Compression:
Stored size: 618 Bytes
Contents
require_relative 'blankslate' 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 < BlankSlate def initialize(fns=[]) @fns = fns end def method_missing(m, *args, &block) fn = -> a, x { if x.respond_to?(m) x.send(m, *a) else send(m, *a) end }.curry[args] ComposedFn.new(@fns + [fn]) end def call(*args) @fns.reduce(:*).call(*args) end def to_ary @fns.to_ary end end end F = Kleisli::ComposedFn.new
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kleisli-0.0.5 | lib/kleisli/composition.rb |