Sha256: 5715b6e7308b2750e0d4e966d415162615bb682080c218bf51fcb1a114d647ac

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

require 'tins/xt'

module Tins
  module ProcPrelude
    def apply(&my_proc)
      my_proc or raise ArgumentError, 'a block argument is required'
      lambda { |list| my_proc.call(*list) }
    end

    def map_apply(my_method, *args, &my_proc)
      my_proc or raise ArgumentError, 'a block argument is required'
      lambda { |x, y| my_proc.call(x, y.__send__(my_method, *args)) }
    end

    def call(obj, &my_proc)
      my_proc or raise ArgumentError, 'a block argument is required'
      obj.instance_eval(&my_proc)
    end

    def array
      lambda { |*list| list }
    end
    memoize_function :array, :freeze =>  true

    def first
      lambda { |*list| list.first }
    end
    memoize_function :first, :freeze =>  true

    alias head first

    def second
      lambda { |*list| list[1] }
    end
    memoize_function :second, :freeze =>  true

    def tail
      lambda { |*list| list[1..-1] }
    end
    memoize_function :tail, :freeze =>  true

    def last
      lambda { |*list| list.last }
    end
    memoize_function :last, :freeze =>  true

    def rotate(n = 1)
      lambda { |*list| list.rotate(n) }
    end

    alias swap rotate

    def id1
      lambda { |obj| obj }
    end
    memoize_function :id1, :freeze =>  true

    def const(konst = nil, &my_proc)
      konst ||= my_proc.call
      lambda { |*_| konst }
    end

    def nth(n)
      lambda { |*list| list[n] }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tins-0.7.0 lib/tins/proc_prelude.rb