Sha256: 75fdea327b9d828d879c277fc655652e549985b27539801759cea8df3ecac116

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'set'

module Rupture
  module Fn
    def complement
      lambda do |*args|
        not call(*args)
      end
    end
    alias -@ complement

    def comp(fn)
      lambda do |*args|
        call(fn[*args])
      end
    end
    alias * comp

    def partial(*partials)
      lambda do |*args|
        call(*(partials + args))
      end
    end

    # def apply(*args)
    #   last = args.pop
    #   call(*F.concat(args, last))
    # end

    def to_proc
      lambda do |key|
        self[key]
      end
    end

    def arity
      -1
    end
  end
end

class Proc
  include Rupture::Fn
end

class Method
  include Rupture::Fn
end

class Symbol
  include Rupture::Fn

  def call(object = nil, *args)
    object.method(self)[*args]
  end
  alias [] call

  def arity
    -2
  end
end

class Hash
  include Rupture::Fn
  alias call []
end

class Array
  include Rupture::Fn
  alias call []
end

class Set
  include Rupture::Fn

  def [](key)
    key if include?(key)
  end
  alias call []
end

class Module
  def [](method_name, *partials)
    lambda do |*args|
      self.send(method_name, *(args + partials))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rupture-0.1.0 lib/rupture/fn.rb